轻量级的进程--线程
2014-09-01 20:44
169 查看
1.为什么有了进程还要有线程?
1.在linux操作系统下,启动一个新的进程必须分配给它独立的地址空间,虚拟地址空间。每个都一样,在虚拟存储器那一节已经学过,并且建立众多的数据表来维护它的代码段,堆栈段和数据段,开销太大了,确实如果都这样工作的话32位的机器每个进程分配4G虚拟空间,进程多了去了,磁盘根本就不够,所以我猜想过一定是通过其他方面进行优化了。运行于一个进程的多个线程,彼此之间使用相同的地址空间,共享大部分数据,而且启动一个线程所花费的时间远远小于启动一个进程。
2.另一个原因不同的进程间的通信只能通过通信的方式进行,不仅费时,而且很不方便。同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他进程所用,快捷,方便,但是也有安全隐患,有的变量不能同时被两个线程所修改。
线程有以下优点:
1.提高系统的响应速度,对图形界面来说很有意义,当一个操作耗时间太长,整个系统都在等待这个操作,此时程序不会响应键盘,鼠标菜单的操作,而使用多进程技术,将耗时很长的操作置于一个新的线程,避免这种尴尬情况。2.使多CPU系统更加有效,操作系统会保证当线程的数目不大于CPU的数目的时候,不同的线程运行在不同的CPU上。
3.改善程序结构,一个既长又复杂的进程可以考虑分成多个线程,成为几个独立或者半独立的部分,原来的银行取款机模拟流程的程序可以优化下。
2.线程编程注意事项和案例
linux操作系统线程操作函数需要用到进程相关的库,不是标准的C语言库,使用的时候要引用pthread.h文件,还要在编译链接时候要使用 -lpthred 选项,表示链接库目录下的库文件,否则编译不过去,提示错误,还需要2.0版本以上的Linux内核#include <stdio.h> #include<pthread.h> #include<stdio.h> #include<unistd.h> #include<string.h> char buffer[]="hello world"; //线程执行函数 void thread_function(void *arg) { int i; printf("New thread is running,arguement is %s\n",(char *)arg); strcpy(buffer,"Bye!"); pthread_exit("this is exit signal");//线程退出,并且返回一句话 } int main() { pthread_t tid; int ret;//保存调用结果 void *thread_result; //创建新的线程,线程号存在tid,执行上面的函数 if((ret=pthread_create(&tid,NULL,(void *)thread_function,(void *)buffer))!=0) { perror("pthread_creat"); exit(1); } printf("Main thread is running \n"); printf("before new thread buff is %s \n",buffer);//打印信息, //线程没有进程那种可以等待很多进程退出的函数,只有一个等待另一个 ret=pthread_join(tid,&thread_result);//等待线程退出,并将返回参数传递给thread_result指针 if(ret!=0) { printf("thread join error!\n"); } printf("main waiting new thread.it returns %s\n",(char*)thread_result); printf("new thread returned,now the buffer is %s\n",buffer); return 0; }
相关文章推荐
- 进程,轻量级进程,内核线程,用户线程的区别关系http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=3441601
- linux内核线程、轻量级进程和用户进程
- linux内核线程、轻量级进程和用户进程
- 内核线程、轻量级进程、用户线程的区别和联系
- Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程
- 内核线程、内核级线程(轻量级进程)和用户级线程 http://www.cnblogs.com/children/archive/2012/04/16/2452740.html
- 关于进程、线程和轻量级进程的一些笔记
- 内核线程、轻量级进程、用户线程和LinuxThreads库
- 进程,轻量级进程,线程,内核线程
- 内核线程、轻量级进程、用户线程
- 进程、轻量级进程(LWP)、线程
- 内核线程、轻量级进程、用户线程
- 内核线程、轻量级进程、用户线程
- 内核线程、轻量级进程、用户线程
- 各大计算机公司 笔试及面试 题目 - 联发科(内核线程、轻量级进程、用户线程和LinuxThreads库)
- 进程、线程、轻量级进程、协程与 go 的 goroutine【转载+整理】
- linux轻量级进程与线程实现
- 进程、轻量级进程(LWP)、线程
- 进程、线程、轻量级进程(LWP)
- 三种线程——内核线程、轻量级进程、用户线程