多线程小结1

在早期的linux中,只有进程,没有线程。
进程是一个可执行程序的实体,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。此时的进程即是资源的拥有者,也是CPU的调度单位。
进程之间即可相互独立,又可相互协作完成并发任务。
但是多进程的协作有以下缺点:创建、销毁、切换速度慢,内存、资源占用大。
在对OS性能要求越来越高(大量数据接入、需要快速响应)的情况下,衍生了多线程。线程将原进程中的调度部分分离出来,成为CPU的调度实体,此时“进程是线程的容器”.应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。每个进程都至少拥有一个线程(主线程),多线程共享进程资源.
多线程的优点恰是多进程的缺点:创建、销毁、切换速度快,内存、资源占用小。
多线程虽好,但也有它自己的弊端:由于资源共享,对于独一份的资源,线程之间容易形成抢夺“冲突”。如果冲突处理不好,要么效率低下,要么形成死锁。
由此可见,多线程与多进程之间各有利弊,运用适当效率大大提升,反之会弄巧成拙。
多进程VS多线程
1)需要频繁创建销毁的优先用线程
2)需要进行大量计算的优先使用线程
3)强相关的处理用线程,弱相关的处理用进程
4)可能要扩展到多机分布的用进程,多核分布的用线程


下面这个例子有3个线程,完成2个任务,读写二进制文件和字符文件。
线程1,2读写同一个二进制文件,由于互斥等待,反而比一个线程用的时间更长。
线程3单独读写字符文件。

编译g++ -g -o thread Multiythread_example.cpp -lpthread

#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值