C++多核高级编程 - 05 多线程

一,什么是线程

线程是进程中可执行代码流的序列,它被操作系统调用,并在处理器或内核上运行。所有进程都有一个主线程,主线程是进程的控制流或执行路线。线程分为用户线程和系统线程,线程在创建,维护和管理方面给系统带来的负担要轻得多。线程用于执行系统中的并发任务,可以简化系统中固有的并发的程序的结构。

用户级线程和内核级线程

线程有三种实现模型: 用户级或应用程序级,内核级,用户级和内核级混合线程。

他们之间主要的区别在于他们的模式以及要指派给处理器的线程的能力。

用户模式下,线程驻留在用户空间,是执行程序或连接库中的指令,由库调度器进行调度。

内核模式下,线程驻留在系统空间,可以进行系统调用,由操作系统调度器调度。

用户线程在运行时,任意给定时刻,每个进程只有一个线程在运行,而且只有一个处理器内核被分配给该进程。运行时调度库从进程的多个线程中选择一个,然后该线程和进程允许的一个内核线程关联起来,用户级线程是一种多对一的线程映射。


user_thread

内核级线程驻留在内核空间,它们是内核对象,由操作系统调度器管理。有了内核线程,每个用户线程被映射或绑定到一个内核线程。 用户线程在其生命期内都会绑定到该内核线程。一旦用户线程终止,两线程都将离开系统。从内核线程到用户线程是一种一对一映射。


sys_thread


混合线程是用户线程和系统线程的交叉,使得运行库和操作系统都可以管理线程。在这种实现中进程有自己的内核线程池。可运行的用户线程由运行时库分派并标记为准备好执行的可用线程。操作系统选择用户线程并将它映射到线程池中可用的内核线程。


hy_thread


线程的上下文

操作系统管理很多进程的执行。它们来着不同的程序或系统。当一个进程从内核中移出,另一个进程成为活动的,这些进程之间便发生了上下文切换。操作系统必须记录重启进程和启动新进程使之活动所需要的所有信息。线程也有相同的处理方式。上下文保存的内容。

上下文内容 进    程 线    程
指向可执行文件的指针 X  
X X
内存(数据段和栈) X  
状态 X X
优先级 X X
程序 IO 的状态 X  
授予权限 X  
调度信息 X  
审计信息 X  
有关资源的信息
-        文件描述符
-        读/写 指针
X  
有关事件和信号的信息 X  
寄存器组
-        栈指针
-        指令计数器
-        诸如此类
X X


二, 线程和进程的比较

线程和进程都能提供并发的程序执行,在决定使用进程或线程时可以从上下文切换开销,吞吐量,实体间通信,程序简化等方面进行考虑。

-    上下文切换:如果只有一个处理器,线程的上下文切换的开销较小。

-    吞吐量:使用多个线程可以增加程序的吞吐量,否则只有一个线程时,线程的IO将使整个程序被阻塞。

-    实体间通信:线程与同一进程间其他线程通信时不要求特殊的通信机制,可以直接进行数据的传输。进程间则必须建立和维护它们之间的通信机制。

-    破坏进程的数据:线程可以很轻松的破坏整个进程的数据。进程有自己的地址空间,相互隔离,数据也受到保护。

-    删除整个进程:线程出错时可以导致整个进程的终止,它导致的错误往往比进程导致的错误代价更大。

-    重用性:线程依赖于进程,不能从它所属的进程分离,不可以直接被重用,进程则更加的独立。



  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 生产者消费者模型:一个或多个生产者生成产品并将其放入队列中,然后一个或多个消费者从队列中取出产品并进行处理。这个模型可以使用多线程实现,其中生产者线程将产品添加到队列中,消费者线程从队列中取出产品进行处理,可以使用互斥量和条件变量来保证线程同步和避免死锁。 2. 并发网络服务器:一个并发网络服务器可以使用多线程来处理多个客户端请求。当一个客户端连接到服务器端口时,服务器创建一个新的线程来处理该客户端请求,并将客户端请求分配到新创建的线程中。 3. 图像处理:在图像处理应用程序中,可以使用多个线程同时对多个图像进行处理。例如,可以使用一个线程从磁盘读取图像,另一个线程对图像进行处理,还有一个线程将处理后的图像写回到磁盘。 4. 音频和视频编解码器:音频和视频编解码器通常涉及到大量的计算和数据传输。可以使用多线程来充分利用多核处理器的计算能力,并加速编解码器的处理速度。 5. 网络爬虫:网络爬虫程序可以使用多线程来处理同时爬取多个网页的任务。可以使用线程池来管理多个线程,以避免线程创建和销毁的开销。 6. 游戏开发:在游戏开发中,可以使用多线程来处理不同的游戏逻辑和图形渲染。例如,可以使用一个线程来更新游戏状态,另一个线程来处理输入事件,还有一个线程来更新屏幕显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值