线程和进程的区别? 多线程有几种实现方法, 都是什么? 同步有几种实现方法,都是什么?

说实话,我以前觉得流程和环节太花哨了。
但我觉得举个例子就更清楚了——这个过程就像一个咖啡店;绳子在夹子里充当服务员的角色。

想一想。
例如,在 Windows 系统上;当您打开记事本时,会创建一个进程。
这个进程是一个独立的单元,包含可执行文件Notepad.exe以及它调用的动态链接库等东西,所有这些东西都放在这个进程的私有空间中。
每个进程就像一个独立的房间,互不干扰。
如果你打开两个记事本,它们运行的​​并不是两个独立的程序,而是同一程序的两次单独执行以及完全独立的数据。

这就像一家咖啡店。
如果你打开两个记事本;这相当于在餐馆里开了“两家记事本店”。
这两家商店销售相同的东西,但分别为客户(数据)提供服务。
您在一个档位中写下的文字在另一档位中将不可见。

有趣的是,就像每个餐厅都有厨师一样,这个过程中也必须有一个中心主题。
开始这个主要话题后,当厨师命令几个帮手一起工作时,就会诞生更多的话题。
这就是多线程。
它很原始——一个进程可以同时处理很多事情。
例如,记事本的主线程负责显示界面;一个线程负责接收输入,另一个线程负责存储文件。

我之前在朋友的电脑上看到过一个例子。
他打开了五本笔记本。
在任务管理器中查看,所有五个进程都是 Notepad.exe,但每个进程都有唯一的进程 ID。
看上去像是五家店铺,招牌相同,但每扇门都有门牌号,方便系统识别。
CPU 时间列特别有趣。
它显示了进程中所有线程占用的CPU时间。
但这里有一个小技巧。
系统会在 1 0 毫秒内计算出数字。
例如,如果一个线程只运行了8 毫秒,但是1 0毫秒的周期到来了。
然后将为预告片计算这 1 0 毫秒的统计数据。
所以有时候你可能会发现一个线程应该很忙,但是它的CPU时间比率却很低。

我自己没有做过,但我记得的数据是Windows系统默认的时钟间隔是1 0毫秒。
这是一个小错误吗?说实话,说这是系统bug可能有点夸张;然而,存在时间不准确的情况。
然而,在大多数应用情况下;这种细微的差别影响不大。

严格来说,进程是程序运行时的一个进程,而线程是进程内最小的执行单元。
该过程就像一个独立的工作站。
绳子看起来像车站服务员。
员工可以在自己的工作站工作,也可以与其他工作站的员工协作。
但无论如何协作,每个工作站都是独立的,互不干扰。
因此系统为每个进程分配独立的内存空间:就像每个咖啡店都有自己独立的操作台一样。
你不会看到摊位 A 拿着盘子 B。

所以你看;进程和段之间区别的关键是独立性。
虽然进程共享相同的环境,但进程具有单独的运行环境。
就像咖啡店和男生之间的关系一样。
你可以随心所欲地开新店,但男孩们都是一样的。

进程和线程的概念、区别和联系

你说的这些都是很公开的。
我不太明白。
我们来谈谈实际的事情吧。

几年前,我的邻居老王开了一个小网站,全是他自己做的。
从一开始,我就有一个用于输入的窗口,另一个用于阅读代码的窗口,以及另一个用于阅读访客消息的窗口。
后来,工作量多了,他就觉得卡住了。
后来,他学习了一些技能,打开小窗口(称为线程)来独立执行阅读消息、发送电子邮件和编辑图片等任务,并且效果非常快。

再比如,你打开浏览器,浏览网页,点击链接,下载一些东西,是不是感觉很流畅?这是因为在浏览器的“大工作”(进程)中,开启了几个“小助手”(线程),每个人都可以毫不拖延地做自己的事情。

你说造这些“小帮手”很便宜吧?真的很便宜。
打开一个新窗口(线程)比打开一个新“公司”(进程)更昂贵。
但如果你搞砸了,例如,如果一个小线程出了问题,整个“大公司”(进程)就必须关闭。
还有一点,这些“小助手”(线程)在一个“大公司”(进程)工作,使用同一套工具(共享内存),对大家来说方便又方便。
但要小心,如果A只拿起锤子,B也想拿起锤子,结果却拿错了,造成混乱。
这意味着添加一个互斥锁以确保一次只有一个人可以访问该对象。

所以你看,有几个“小助手”(线程)在“大作业”(进程)内运行。
他们使用彼此的资源(内存、文件)并在完成任务后一起报告(同时执行)。
这是一个非常实际的体现。