Pthread - POSIX线程编程
编程技术  /  houtizong 发布于 3年前   155
线程的动机是充分利用多核,方便地实现并行编程。然而,早期的硬件厂商纷纷实现自己的一套线程标准,这样,程序员无法开发可移植的软件。为了结束这个局面,对UNIX系统,IEEE制定了一个C语言线程编程接口标准(IEEE POSIX 1003.1c)。参考这个标准的实现就被称作POSIX threads 或者 Pthreads.
什么是线程?
在理解线程之前,可以考察一个UNIX进程。一个进程由操作系统创建,包含一些程序资源和运行状态的信息,包括:
线程是一些独立的指令流,并且可以被操作系统调度。指令流执行的控制之所以是独立的,并且能被调度,源于线程有独立的:
总而言之,在UNIX中,一个线程:
因为多个线程存在于一个进程中,这会导致下面几种情况:
为什么要引入Pthreads
Pthreads的一个主要目标是提升程序的性能。创建线程和线程的调度并不会占用操作系统很多的负载。进程中的所有线程共享相同的地址空间,所以,线程之间的通信相比较进程会更高效和容易。多线程应用可以通过下面的途径达到性能上的提升:
设计多线程的程序
在现代多核CPU的系统中,pthreads很优雅地适合并行编程。实际上,在进行并行编程的过程中,需要有诸多考虑:
通常来讲,为了充分利用多线程带来的益处,一个程序员必须将程序划分为离散的,互相独立的任务,这些任务可以兵符执行。比如说,routine1和routine2的执行可以互相重叠,那么,就可以利用多线程。通常,拥有下面特点的程序就适合使用多线程:
有几个通用的多线程模式:
线程管理
创建和终止线程的接口有下面几种:
pthread_create (thread,attr,start_routine,arg)pthread_exit (status)pthread_cancel (thread)pthread_attr_init (attr)pthread_attr_destroy (attr)
一开始,main方法默认会创建一个独立的线程。其他的线程必须由程序员显式创建。可以在任何时候和任何地方创建一个新的线程。被创建的线程也可以创建新的线程。
Pthreads提供了多个接口被用于线程定义如何调度线程。例如,可以指定线程的调度使用FIFO(first in first out), RR(round-robin)或者OTHER(由操作系统来控制)的调度方案。Pthreads还提供了设置线程优先级的接口。
线程终止有多种途径:
pthread_exit并不会关闭打开的文件句柄,任何在线程中打开的文件都会一直保持打开状态,尽管线程已经中止。
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接