DAY 27

一、非阻塞和阻塞

· 非阻寨调用:
waitpid(-1,&wstatus,WNOHANG);

1.阻塞
会父进程处理逻辑

2.非阻塞
父进程 会去查看 子进程状态改变,但是,如果没有发生改变,父进程不阻塞,整个程序继续往下

总结:
一、1.wait 和 waitpid都是 等待子进程状态改变

2.wait是一种阻塞调用

3.waitpid 可以实现非阻塞调用 

 

二、1.创建---fork
//创建一个子进程
//创建多个子进程
//创建好之后,能区分父子进程代码的逻辑
2.执行
a.做与父进程相同的事情

b.做与父进程不同的事情
fork +exec //minishell

3.进程的退出
return
exit
_exit

4.两个特殊状态
孤儿进程---没有危害,不需要处理

僵尸态进程---处理工

wait
waitpid

二、多任务的技术:线程

1.什么是线程

线程是 CPU 使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。一个传统重量级(heavyweight)的进程只有单个控制线程。如果进程有多个控制线程,那么它能同时做多个任务。

      传统单线程进程和多线程进程的区别:

 2.线程的产生——fork

线程—轻量级的进程

进程—重量级的进程

线程的创建和调度都比进程小

3.线程的组成

4.线程与进程的关系

1.线程是存在于进程中的

2.线程共享了进程的资源(代码段,数据段,打开文件,信号等)

3.线程结束,不一定导致进程结束

5.线程的编程

过程与进程类似

线程的(创建——执行——退出——资源回收)

创建: 

int pthread_create(pthread_t *thread, const pthread_attr_t*attr, void *(*start_routine)(void *)
                               void *arg);
功能:该函数可以创建指定的一个线程。

参数:
thread  线程id,需要实现定义并由该数返回。

attr  线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
start_routine   线程执行函数(线程回调函数)

                       是线程的执行空间。

arg   回调函数的参数。

(主函数所在的执行流叫做主线程,其他的线程叫做子线程或次线程。且各个线程之间地位平等。)
       获得tid:pthread_self();

       在哪个线程中调用,获得 哪个线程的tid;

 执行:

体现在执行函数(回调函数)上

 退出:

方式1:pthread_exit

void  pthread_exit(void *retval)

功能:结束调用的线程

参数:retval

注意: pthread exit 本身表示结束线程,如果用在main函数中表结束主线程,主线程结束 并不表                示进程,此时,主线程执行流结束,进程会在其余线程都结束后结束。

资源回收:

int pthread_join(pthread_t thread, void **retval);

功能:等待线程结束
参数:thread ——线程tid

           retval ——用来保存,退出状态值所在空间的地址

 返回值:成功 0;失败 错误码。

 

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值