1、进程的劣势
(1)进程间切换开销大
(2)进程间通信特别麻烦而且效率低
2、解决方案就是线程技术
(1)线程技术保留了进程技术实现多任务的特性。
(2)线程的改进就是在线程间切换和线程间通信上提升了效率。
(3)一个简单的例子实现一个进程中多线程,实现同时读键盘和鼠标
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
char buf[100];
void *func(void* argv)//需要注意的是线程函数的参数类型(void *)
{
while(1)
{
printf("before read\n");
memset(buf,0,sizeof(buf));
read(0,buf,20);
printf("读出键盘的内容%s\n",buf);
}
}
int main(int argc,char* argv[])
{
int fd = -1;
pthread_t pth = -1;
fd = open("/dev/input/mouse1",O_RDONLY);
if(fd<0)
{
printf("打开文件错误\n");
}
if(pthread_create(&pth,NULL,func,NULL))//创建一个线程,线程的函数为func
{
printf("pthread_creat error\n");
return -1;
}
while(1)
{
printf("before read\n");
memset(buf,0,sizeof(buf));
read(fd,buf,20);
printf("读出鼠标的内容%s\n",buf);
}
return 0;
}
3、linux中线程的简介
(1)一种轻量级进程
(2)线程是参与内核调度的最小单元
(3)一个进程可以有多个进程
4、线程技术的优势
(1)像进程一样可被OS调度
(2)同一进程的多个线程之间容易高效率通信
(3)在多核心CPU架构下效率最大化