线程是一个轻量级的进程。线程给操作系统带来的开销要轻
当从处理器删除一个进程并激活另外一个进程,就发生上下文切换。
线程没有地址空间,就包含在进程的地址 空间,线程上下文一个堆栈、一个寄存器和一个优先权
线程和进程的不同:
线程没有地址空间
父和子进程必须使用进程间通信机制,同一进程的线程通过读取和写入数据写到进程变量来通信。
线程可以相互进行控制,进程间不能施加控制
子进程不能对父进程施加控制,线程都可以对主线程施加控制,并影响主线程
线程的优点:
当创建一个主进程的时候,系统就创建一个主线程。主线程为执行线程,多线程本质是多个子线程并发执行。
线程的缺点:
线程需要同步并发访问内存。需要进行同步化。
如果一个数据产生影响其他线程的不良数据,相对而言,进程更为独立。
线程有不同的类型
休眠和单步
先占工作
延迟工作
休眠线程在系统中某事件发生前一直挂起。当事件发生时候,休眠线程得到恢复,并执行任务。执行任务后,线程为非激活,直到事件再次发生。
单步线程实际上也是休眠线程,但它们执行任务一次之后就终止。
休眠线程和单步线程也可以称为监视线程。
先占工作:
使用先占工作策略,对情况进行估计,并先执行一些动作,永不等待规则,目的是阻止非激活。
延迟工作:
线程可以将任务延迟或推迟到将来某个时间执行的另外一个线程。
线程的相关信息
大部分线程的行为信息由进程定义
posix环境有个针对线程的属性对象,这个对象是线程属性的封装体。属性对象可以与一个线程关联,也可以与多个线程关联。
每个线程维护一个进程内存中分配的堆栈。在线程终止的时候释放堆栈,并销毁变量。
线程在执行完毕后终止,当线程返回创建它的函数自动终止。线程资源释放,线程也可以显示地调用一个线程终止函数。线程可以强迫另外一个线程终止,但是不能强迫自己终止。
分离线程为异步子进程,它不继承父进程的属性。它们用作后台进程,在终止时候不返回到父进程
守护线程是分离进程的一个例子,大部分时间处于阻塞,直到系统中发生一个事件,它才激活。
远程线程:
在win32中,一个进程中的线程可以创建另外一个进程中的线程
线程控制
线程可以访问别的线程打开的资源,可以关闭别的线程。
临界区是一种防止冲突的机制。
优先类:
优先权倒置,当一个较低优先权线程锁定一个资源,这个资源是一个较高优先权需要,就会发生优先权倒置。