
线程类似于进程. 像进程一样,线程在时间片中由内核管理. 在单处理器系统中posix 进程 线程,内核使用时间切片以与进程相同的方式模拟线程的并发执行. 在多处理器系统中,与多个进程一样,线程实际上可以并发执行.
那么对于大多数协作任务,为什么多线程优于多个独立进程?这是因为线程共享相同的内存空间. 不同的线程可以访问内存中的相同变量. 因此,程序中的所有线程都可以读取或写入声明的全局变量. 如果您曾经使用过fork()编写重要的代码,您将意识到该工具的重要性. 为什么?尽管fork()允许创建多个进程posix 进程 线程,但它也带来以下通信问题: 如何使多个进程彼此通信,其中每个进程都有自己独立的内存空间. 这个问题没有简单的答案. 尽管本地IPC有很多不同的类型
(进程间通信),但是它们都遇到两个重要的障碍:
双重坏事: 成本和复杂性是坏事. 如果您曾经为支持IPC而奋斗过,那么您将真正体会到线程提供的简单共享内存机制. 由于所有线程都驻留在相同的内存空间中,因此POSIX线程无需进行昂贵且复杂的长途调用. 只要使用简单的同步机制,程序中的所有线程都可以读取和修改现有数据结构. 无需通过文件描述符将数据转储或压缩到紧密的共享内存空间中. 仅此一个原因就足以让您考虑应该采用单进程/多线程模式而不是多进程/单线程模式.

线程很快
不仅如此. 线程化也非常快. 与标准fork()相比,线程导致的开销非常小. 内核不需要单独复制进程的内存空间或文件描述符. 这节省了大量CPU时间,使线程创建比新进程创建快十到一百倍. 因此,您可以大量使用线程,而不必担心CPU或内存不足. 由fork()引起的大量CPU使用率不再存在. 这意味着只要在程序中有意义,通常就可以创建线程.
当然,与进程一样,线程将利用多个CPU. 如果该软件是为多处理器系统设计的,那么这确实是一个很大的功能(如果该软件是开源的,则最终可能会在许多平台上运行). 某些类型的线程程序(尤其是CPU密集型程序)的性能将随着系统中处理器数量的增加而线性增加. 如果您正在编写占用大量CPU的程序,则肯定要尝试在代码中使用多个线程. 掌握了线程编码之后,您就可以通过新颖的方式解决编码问题,而无需使用笨拙的IPC和其他复杂的通信机制. 所有这些功能一起使多线程编程变得更加有趣,快速和灵活.
线程是可移植的

如果您熟悉Linux编程,则可能知道__clone()系统调用. __clone()与fork()类似,但也具有许多线程特征. 例如,使用__clone(),新的子进程可以有选择地共享父进程的执行环境(内存空间,文件描述符等). 这是好的一面. 但是__clone()也有缺点.
线程的主要学习内容
什么是线程



UNIX过程
在UNIX过程中的线程
因此,UNIX环境中的线程: 因为同一进程中的线程共享资源:

使用线程设计程序
包括这些主题超出了本教程的范围. 有兴趣的读者可以快速浏览“并行计算入门”教程. 通常,为了利用Pthreads的优点,任务组织必须是离散的,独立的并且可以并发执行. 例如,如果例程1和例程2是可互换的,并且彼此交叉和/或重叠,则可以对其进行线程化.
Pthreads也可以在串行程序中使用,以模拟并行执行. 经典的网络浏览器就是一个很好的例子. 对于大多数人来说,在单个CPU上运行的台式机/笔记本电脑可以同时“显示”很多东西. 使用线程进行编程的几种常见模型:
共享内存模型:
线程安全性:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-285468-1.html
6%