跳转至

线程

网上查找线程的资料,很多都是讲的概念,并不讲实际案例,而线程也是分很多实现方法的,对于线程各种状态,也是不同实现方法实现的线程存在差异

我平时接触最多的就是Linux,这里只针对centos的Linux线程做阐述

线程是什么

维基百科上的基本概念:https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B

线程的标准是 POSIX线程(POSIX threads),简称Pthreads, 是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程

历史

一开始Linux的多线程是 LinuxThreads 这个工程带入到 Linux 的,但是不符合POSIX threads,后来出现了 NPTL,代替 LinuxThreads。一直以来, linux内核并没有线程的概念. 每一个执行实体都是一个task_struct结构, 通常称之为进程. 也就是LWP,Linux内核在 2.0.x版本就已经实现了轻量进程,应用程序可以通过一个统一的clone()系统调用接口,用不同的参数指定创建轻量进程还是普通进程。在内核中, clone()调用经过参数传递和解释后会调用do_fork(),这个核内函数同时也是fork()、vfork()系统调用的最终实现。后来为了引入多线程,Linux2.0~2.4实现的是俗称LinuxThreads的多线程方式,到了2.6,基本上都是NPTL的方式了

LinuxThreads : https://en.wikipedia.org/wiki/LinuxThreads

NPTL : https://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

查看

在现代的既有 NPTL 又有 LinuxThreads 的 Linux 发行版中,可以通过下面的命令来查看当前使用的是哪个线程库:

$ getconf GNU_LIBPTHREAD_VERSION

输出的结果如下:

NPTL 0.34

或者:

linuxthreads-0.10

相关资料链接:

链接:https://blog.csdn.net/kwinway/article/details/80550937

链接:https://www.jianshu.com/p/6c507b966ad1