注:部分概念主要源于《深入理解计算机系统》
一、线程与进程及超线程:
线程:线程与进程的区别和联系是,每个线程都运行在进程的上下文。
这里上下文是指不同线程或进程间的切换,上下文的概念主要来源于进程,对于每个进程而言它都是独占CPU和主存的,而电脑中是允许多个进程的,所以在并发执行的时候需要在不同进程之间切换,使得最后产生的效果是多个进程在同时运行。实际上是由于CPU的高速切换,使得我们人是无法辨识的而已。
在进程后出现了一个新的概念就是进程,相对于进程而言,不同进程是进程的上下文,不同进程共享的是同一进程的空间和资源如全局变量、代码等。线程之所以在现在的代码中经常出现大部分原因是,它用在网络编程中。体现在网络服务器对并行的需要。
超线程是在多核处理器之后出现的,所以多线程现在一般指的是单核,它在上下文切换或线程切换时,一般是在20000个时钟周期之后。而超线程是指在在单个周期内决定指行哪个线程。其实就是不同线程可以在不同的核上来执行,实现真正的并行。
二、大小端问题:
首先,直观来讲,大小端的区分指的是数据存储时超始点是高位还是低位,高位则是大端,低位则是小端。对于一个0x1234567,存在于0x10时,大小端直观显示如下:
![这里写图片描述](https://img-blog.csdn.net/20170804100547594?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW54dXhpYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
为什么要区分大小端了,原因是在网络传输时,如果一端大,一端小转的数据是相反的,就无法通信。因此在网络通信时必须按照通信协议。
从硬件区分,Intel的一般为小端,IBM和Oracle一般为大端。事实上,对于我们而言,大小端是由操作系统决定的,如ARM采用大小端可以选择的方式,Andriod是小端格式。
三、文件操作:
在读写文件时,文件中会有一个偏移值,当读到尾的时候会触发一个条件–(end of file)EOF.
文件类型主要分为:
普通文件:包括二进制文件和文本文件
目录文件:Linux的目录结构里
通信文件:包括Socket文件,有名管道和无名管道文件
设备文件:字符设备,块设备