{linux应用编程} 进程和线程总结

一、进程

创建、退出、共享空间的子进程、退出进程、进程的所有者、调试、僵尸进程;

信号:中断操作,比如Kill相当于windows中的消息。

进程通信:管道(有名管道与无名管道)、System V IPC/POSIX IPC、共享内存、信号量、消息队列

二、线程:

创建、退出

线程同步:互斥量(也是锁)、读写锁(一个是读的锁一个是写的锁)、条件变量、线程属性操作、进行锁的操作时最好不要在阻塞中进行(当有DDOS攻击时.....)。


从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。

http://bbs.chinaunix.net/thread-132343-1-1.html


对于网络服务器有多进程服务器与多线程服务器,有人说多线好,但是又有多进程中每个进程有自己独立的内存空间.一个进程死掉不会影响其他的进程.

线程执行开销小,同进程内的各线程共享同一虚拟地址空间,故其产生的速度快,线程间的通讯快、切换快,但是需要考虑数据访问的同步。
不同的进程有各自独立的虚拟地址空间,故其对系统资源的消耗更大,但是进程数据是独立的,能够得到更好的逻辑抽象和运行抽象。

没有绝对的好与坏,只有哪个更加合适的问题。我们来看实际应用中究竟如何判断更加合适。

在并发与多进程(多线程)中的资源收回问题(僵尸进程)

进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。(2014/2/27)

int pthread_detach(pthread_t thread)  http://biancheng.dnbcw.info/linux/369315.html

有些时候,我们并不太关心线程的退出状态。我们只是想让线程自己终止,然后清除掉他自己使用的资源。在这种情况下,我们就使用该函数来detach该线程。这样不会出现“僵尸”线程。分离一个正在运行的线程不会对线程代理任何影响,仅仅是通知系统当该线程结束时,其所有资源可以被回收。

建议使用设置线程属性的方法来实现资源回收. PTHREAD_CREATE_DETACHED属性,表示该线程是一个状态分离状态的线程,则该线程一退出,便可重用其线程 ID 和其他资源,

为父进程添加SIGCHLD信号,当子进程退出时父进程就会收到这个信号,使父进程调用wait或者是waitpid来处理退出的子进程信息使其不成为僵尸进程

void  (*signal ( int signum,void(* handler)(int) ) ) (int); //设置信号:signal(SIGCHLD,handler); /*SIG_ERR出错返回*/    void handler(int signo);  

pid_t wait(int *statloc); //可以获取本身创建的多个子进程的结束状态,会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果服务器没有调用wait取子进程的结束状态,哪么僵尸进程将大量出现。

pid_t wait_pid(pid_t pid, int *statloc,int options);  //多进程使用这个好些

例: 

  1. void sig_chld(int signo)
  2. {
  3. pid_t pid; 
  4. int stat;
  5. while( (pid= waitpid(-1, &stat, WNOHANG))>0) 
  6. printf("child %d terminated \n",pid);
  7. return ;
  8. }

pthread_join(pthread_t tid,vodi **rval_ptr); //取线程退出信息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值