《C++面向对象多线程编程》笔记--1

 

线程也有上下文,当线程被抢先时,必定发生线程的上下文切换。线程没有地址空间,它是包含在进程的地址空间之中。

实际上线程上下文只包含一个堆栈、一个寄存器组和优先权,寄存器组包含程序或者指令指针以及堆栈指针。

 

一个进程中的所有线程称为同位体(peer),所有线程共享进程中的资源,进程不拥有任何资源。由任何线程创建的任何资源都可以被他的同位体共享,线程可以在进程中挂起、恢复和终止其他线程。

         某进程的逻辑布局             具有次线程的某进程的逻辑布局           

 

        

                   进程的逻辑布局与线程的逻辑布局的对比

多线程实现的一个典型的例子是执行自然语言处理(natural language processing, NLP)。

 

线程与进程的区别P52

线程没有自己的address space,如果进程创建多个线程所有线程都将包好在它的地址空间之中,这是为什么它们如此容易共享资源。对变量的修改不会影响父进程的数据。为了让父子进程间共享内存,必须创建一个共享内存区域,父子进程必须使用进程间通信机制(如管道)在两者通信和传输数据。

 

进程内的线程被看做同位体,而且处于相等的级别。不管是哪个线程创建了哪个线程,进程内的任何线程都可以销毁、挂起、恢复或者更改其他线程的优先权,线程也对要整个进程施加控制。进程内的任何线程可以通过销毁主线程来销毁该进程。销毁主线程将导致该进程的所有线程都被销毁

 

对进程优先权的更改将改变进程内继承了优先权但是没有作修改的所有线程的优先权。

 

子进程不能对父进程施加控制;

 

线程的优点:

1、  当进程有许多并发子任务时,多线程就可以提供子任务的异步执行。这种方式对上下文切换所花的开销相对较少,而并发多进程(一进程一线程)则需要上下文的切换的开销较大。

2、  多线程可以增加应用程序的吞吐能力。通过一个线程,一个I/O请求就可以停止整个进程,通过多线程,当一个线程等待I/O请求时,程序可以继续执行,当一个线程阻塞时,另一个线程可以执行

3、  线程不需要子任务间的特殊通信机制。线程可以在任务之间轻松的传递与接收数据,节省系统资源。

 

线程的缺点:

1、  进程是孤立的。一个线程可能产生影响其他线程的不良数据,线程导致的错误比进程产生的错误付出的代价将会更大。

2、  进程更孤立。一个应用程序可以将任务分为多个进程来做,这些进程打包成模块,这些模块可以用于其他的应用程序之中,其他的应用程序中的模块可以导入新的应用程序,而线程不能退出到创建它的进程之外的。

3、  进程可以保护资源不被其他进程随意访问,线程与进程中所有线程共享资源。、

 

 

 

参数结构和线程ID不应该是局部声明变量。在新创建线程的生存期内,调用线程可能会约出作用域,如果这种情况发生,线程的堆栈将被释放,而且销毁变量。

 

进程内的一个线程可一个强迫另一个线程终止。线程不能强迫自己终止。

 

分离进程为异步子进程,它不继承父进程的任何属性,他们用作后台进程,不需要键盘输入或者屏幕输出。分离进程在终止时不反悔到父进程,分离进程在这一点与分离进程相似。

 

远程线程:

 

 

改变线程优先权

高优先类线程比较低优先类线程接受更多的处理器时间,因为他们执行的时间更加频繁些,看起来这对低优先类的线程不公平,较高优先类线程主宰处理器,剥夺其他优先类的线程的处理器时间,成为线程饥饿。

   线程的优先权包括一个优先类(priority class)和一个优先级(priority level)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值