同一进程内的多条执行线

多线程进程可以同时保留多个执行位置,每个线程有自己的寄存器与调用状态。线程通常共享进程的代码、全局数据和堆,因此一个线程建立的数据可以被其他线程访问。共享资源使它们区别于完全独立的程序实例,也让任务之间交换信息时不总需要经过外部通信接口。

参考:[1]

共享带来协调要求

两个线程修改同一个计数器时,读取、增加与写回可能交错,导致一次更新丢失。锁、原子操作及其他同步机制为访问建立约束,帮助维护共享数据的性质。程序需要根据实际共享关系选择同步范围;锁过大降低并发机会,锁过碎则可能增加复杂性和协调成本。

参考:[2]

线程由谁调度

有些线程由操作系统直接调度,有些执行活动则由语言运行时映射到系统线程。多个核心可以支持并行,但能否同时执行、何时等待和切换,仍取决于调度与程序条件。协程强调可暂停恢复的控制结构,线程强调执行活动与资源共享关系,二者能够组合而不必一一对应。

参考:[1]

创建以后还要收尾

线程接口规定入口函数、参数、栈等属性,以及完成后怎样释放或回收相关资源。等待一个线程结束,与持续占用处理器反复检查状态,是不同的协调办法。长期服务还要限制工作线程数量并传播失败,使已经完成、退出或失效的活动不会继续占据应用依赖的资源。

参考:[2]