线程的基本概念

一.有关于线程的定义

线程是进程执行的一个分支,运行在进程的内部,是调度的一个基本单元。线程不像进程强调独占,它更多强调的是共享。一个进程可以有多个控制流程即有多个线程,进程是承担和分配系统资源的基本实体。

举个例子:

进程好比是一个大家庭,而线程就相当于是家里的每一个成员,每个成员各司其职,共同让这个大家庭变得更好。这个大家庭的资源,每个成员都可以共享,但这并不是绝对的。因为每个成员都有自己私有的空间或秘密等。所以线程有和进程共同的东西,也有自己私有的。

线程和进程共同的:

1.文件描述符表:描述当前进程所打开的所有文件;

2.当前工作目录;

3.用户id;

4.信号处理方式

线程私有的:(2和3 是重点)

1.线程的id;

2.硬件上下文,包括各寄存器的值,栈指针和程序计数器;

3.栈空间(线程自己的);

4.errno变量;

5.信号屏蔽字;//处理需要处理的,屏蔽不需处理的

6.调度优先级;

二.线程的控制

1.线程的创建

线程的创建是由POSIX 标准定义的,称为POSIX thread 或pthread。在编译的时候要加上_lpthread选项。

线程的创建函数:

pthread_create(pthread _t thread,const pthread_attr _t *attr,void*(*start_routine)(void*),void *arg);//arg 是给第三个传的参数

2.线程的终止

线程在创建退出后,主线程必须进行等待拿到其退出状态。函数原型为:

int pthread_join(pthread_t thread,void ** retval)

这个函数是以阻塞方式进行的。成功返回0,失败返回错误码。

第一个终止方式:

在线程内部直接return 或 用函数 pthread_exit(void *retval);

第二个终止方式:

在线程内部使用pthread _cancel(pthread_t thread);

thread 可以用函数pthread_t pthread_self(void)获得当前线程自己的id。

第三个终止方式:

在主函数内部调用函数 pthread _cancel(pthread_t thread);

三.线程代码

时间: 2024-10-03 22:40:30

线程的基本概念的相关文章

java多线程(1) 线程的基本概念

一.线程的基本概念: 线程是一个程序里面不同的执行路径. 程序里面不同的执行路径,每一个分支都是一个线程. 进程:静态的概念.机器上的一个class文件,机器上的一个exe文件,这叫一个进程. 机器里面实际上运行的都是线程. window等.linux等都是多进程,多线程的系统. CPU的执行是这样的: CPU速度比较快,一秒钟算好几亿次,它把自己的时间分成一个一个的小时间片,这个时间片我执行你一会,再执行他一会,虽然有几十个线程, 没关系,执行这个一会,执行那个一会,挨着排的都执行一遍,但是对

Java深度历险(三)——Java线程?:基本概念、可见性与同步

开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于Java来说,在语言内部提供了线程的支持.但是Java的多线程应用开发会遇到很多问题.首先是很难编写正确,其次是很难测试是否正确,最后是出现问题时很难调试.一个多线程应用可能运行了好几天都没问题,然后突然就出现了问题,之后却又无法再次重现出来.如果在正确性之外,还需要考虑应用的吞吐量和性能优化的话,就

线程的基本概念和操作

一:线程的基本概念 1.      调用run()方法 public class Demo1 { publicstatic void main(String[] args) { Thread1th1=new Thread1("线程A"); Thread1th2=new Thread1("线程B"); th1.run(); th2.run(); } } class Thread1 extends Thread{ privateString name; publicTh

09_1_线程的基本概念

09_1_线程的基本概念 1. 线程的基本概念 线程的一个程序内部的顺序控制流. 线程和进程的区别 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销. 线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小. 多进程:在程序系统中同时运行多个任务(程序). 多线程:在同一个应用程序中有多个顺序流同时执行 Java的线程是通过java.lang.Thread类来实现的. VM启动时会有一个自主方法(publi

java线程的基本概念

进程和线程 进程的诞生 操作系统中有2个任务A,B,任务A先执行,执行到一半需要io,因此要大量时间,在这个时间段内cpu是空闲的,浪费了资源,于是就有进程,当A暂时无法利用cpu,但是又不能销毁时,就把它暂存起来,让B来执行.B执行完或者需要A执行时,根据暂存的信息回复过来. 每个进程都对应一定的内存空间,并且只能使用自己的内存空间,并且保留程序的运行状态,这个也为进程切换提供了基础. 线程的诞生 第一,多核处理器的出现,为了更好的利用多核处理器,避免资源的浪费.第二程序的需要,人们需要在一个

Linux 下进程与线程的基本概念

2019-10-01 关键字:进程.线程.信号量.互斥锁 什么是程序? 程序就是存放在磁盘上的指令和数据的有序集合,就是源代码编译产物. 它是静态的. 什么是进程? 进程就是操作系统为执行某个程序所分配的资源的总称.进程是程序的一次执行过程,因此它与程序不同,它是动态的.它的生命周期包括创建.调度.执行和消亡. 进程的内容主要包括以下三个部分: 1.正文段: 2.用户数据段: 3.系统数据段. 其中正文段与用户数据段两部分是从程序当中来的.而系统数据段则是操作系统分配的用来管理这个进程用的. 系

有关进程和线程的小概念

# 1.线程与进程的区别是什么?(怎么理解怎么写)'''进程是程序运行的状态和过程.进程会占用内存中的一块空间,消耗资源.每个进程最少会有一个线程(主线程),可以有多个线程.pyyhon在运行的过程中最多只能有一个线程调用CPU资源,那是因为在每个进程前面有GIL全局解释器锁.多个线程通过全局解释器锁是靠操作系统分配的,同一时刻只能有一个线程获得CPU资源 ,如果该线程遇到IO操作,操作系统会将CPU分配给别的线程做运算,直到该线程IO操作结束继续计算.如果多线程计算过程调用了全局变量就需要注意

java多线程_01_线程的基本概念

线程:一个程序里边不同的执行路径 例子程序:这个例子程序是一条执行路径.这个程序只有一个分支,就是main方法,叫主线程 public static void main(String[] args) { m1(); } public static void m1(){ m2(); m3(); } public static void m2(){} public static void m3(){} 程序执行示意图: 进程:进程是一个静态的概念,机器上的一个class文件,一个exe文件. 程序的

线程,进程概念

当多个客户端访问服务端的时候,每个客户端都会对服务端说:’嗨,我想连接你‘.服务端的sorcket通过while循环,一直监听着是否有client请求连接,当有请求(一个或者多个)连接过来的时候:就会分配(一个或者多个)进程或者线程给client,并保持连接,进行通话. 线程是应用程序的最小单位, #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def show(arg): time.sleep(

线程的基本概念 / 计算机程序的思维逻辑

创建线程 线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈.下面,我们通过创建线程来对线程建立一个直观感受,在Java中创建线程有两种方式,一种是继承Thread,另外一种是实现Runnable接口,我们先来看第一种. 继承Thread Java中java.lang.Thread这个类表示线程,一个类可以继承Thread并重写其run方法来实现一个线程,如下所示: public class HelloThread extends Thread {        @Override