云计算百科
云计算领域专业知识百科平台

一文入门Linux进程线程

进程概念
一个程序文件(program),只是一堆待执行的代码和部分待处理的数据,他们只有
被加载到内存中,然后让 CPU 逐条执行其代码,根据代码做出相应的动作,才形成一个真
正“活的”、动态的进程(process),因此进程是一个动态变化的过程,是一出有始有终
的戏,而程序文件只是这一系列动作的原始蓝本,是一个静态的剧本。

进程状态

相关重要 API

这个函数接口本身非常简单,简单到连参数都没有,但是这个函数有个非常与众不同的
地方:他会使得进程一分为二!就像细胞分裂一样!!!

进程间通信

进程间的通信(IPC)方式,总归起来主要有如下这些:
1,无名管道(PIPE)和有名管道(FIFO)。
2,信号(signal)。
3,system V-IPC 之共享内存。
4,system V-IPC 之消息队列。
5,system V-IPC 之信号量。
6,套接字

例子————无名管道

int main(int argc,char **argv)
{
   int fd[2];
   if(pipe(fd)==-1){
       perror("pipe()");
       exit(1);
   }
   pid_t x=fork();
   if(x==0)
   {
       char *s="hello";
       write(fd[1],s,strlen(s));
   }
   if(x>0){
       char buf[30];
       bzero(buf,30);
       read(fd[0],buf,30);
       printf("from child:%s",buf);
   }
   close(fd[0]);
   close(fd[1]);
    return 0;
}

线程基本概念 

线程实际上是应用层的概念,在 Linux 内核中,所有的调度实体都被称为任务(task),他们之间的区别是:有些任务自己拥有一套完整的资源,而有些任务彼此之间共享一套资源。

左边是一个标准进程,他拥有自己的一套完整的资源——包括内存空间、
文件、信号挂起队列等等,这些资源全部由 PCB(即内核结构体 task_struct)统一管理,
这整一套数据结构,以及他们的动态变化就是一个进程。
对于右边,可以看到有两个 PCB 结构体共享很多资源,而一个 PCB 对应系统中的一个
任务,是系统调度器的调度对象,系统在调度的时候并不关心这些 PCB 究竟是独立拥有一
套资源还是跟别人共享,因此右边的多个调度实体(线程)的进程就比单个调度实体的进程
可以获得更多的 CPU 资源来管理和操作他们的资源。这是多线程给我们的最初的印象。
但线程给我们的不止这些,虽然一个进程内部的多条线程共享了大部分资源,但是还是
有一些信息是各自独立的——比如其运行状态,当一个线程处于睡眠的时候,另一条线程可
以正在运行,而或许有些线程已经变成僵尸了!就像一个人是如果是多线程的,他就可以做
到一边睡觉一边吃饭一边在洗澡!正是利用线程状态独立的特征,程序才有可能一遍阻塞等
待,一遍干别的事情,尽最大可能榨取处理器资源。

第一个必须知道的 API 是线程的创建:

赞(0)
未经允许不得转载:网硕互联帮助中心 » 一文入门Linux进程线程
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!