我目前理解的进程和线程


        假设有这么一个场景,有两个客户端通过服务端进行中转,实现客户端之间的即时收发信息通信
        此时,服务器为了同时接收两个客户端的连接,开启两个进程来处理数据,也就是说同一个程序打开了两次,它们分别对应来自不同目标的同类任务,两个进程之间只有代码逻辑部分占用的内存是共享的,其他的内存使用都会独立预分配内存空间,我们姑且给这两个进程各自开辟的内存空间称为进程内存1和进程内存2
        情景来到了建立连接后的通信阶段,在没有多线程时,客户端1发消息到中转服务器,中转服务器接到消息再发给客户端2,因为两个客户端是一样的,那么我们把目光聚集到其中一个客户端,如客户端1,让我们看看客户端与服务端通信时在发生什么,客户端1发消息给服务端,接着接消息,服务端呢也大致一样,先接消息再发消息给客户端1,这样的话不管是服务端还是客户端都有一个特征,就是同一时间只能做一件事,即要么在发消息,要么在接消息,只有执行完这一步才能进行下一步,而这与我们即时通信的要求是不符的,所以我们就需要一个方法来实现同时做这两件事,怎么做呢,这里就用到了线程,我们可以分别为发消息和收消息的逻辑代码开启单独的线程来达到同时处理收发消息两个任务的目的,原理呢其实与进程类似,也是独立开辟内存,但是在哪儿分配内存呢?对,就是你想的那样,在我们已经分配的进程的内存里再次细分来为其独立分配内存(是不是很像执行函数时保留当前栈帧再开辟新内存来给新函数用,都是一样的),这样一来,我们也就达到了我们的目的
        总结:
        1. 进程是为多任务准备的,以保持任务的独立,而线程是为进程中的多逻辑(代码)准备的,同样也是为了达到进程内的细分逻辑独立,互不影响,以此来达到并发(即同时发生)的目的
        2. 进程的代码是共享的,而线程的逻辑代码,可以是重合的,也可以是独立的,也就是说线程1可能使用了这段代码,线程2依然使用这段代码,或者线程1和线程2分别使用不同的逻辑代码
        3 其他特征
            3.1 进程对应不同内存,代码区共享,同一个进程内的线程间共享全局变量和静态变量区
            3.2 一个进程挂掉不会影响另一个进程,而一个线程挂掉可能直接影响线程所在的整个线程导致当前进程挂掉,那同线程的其他进程自然也就不复存在了
参考链接:进程和线程的对比和区别 - sandea - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值