作业和进程的区别?

你这说的我有点懵,太理论了。
咱不说这些虚的,就聊聊我碰过的坑。

就说前年吧,我在上海那边搞一个ERP系统,客户那边非要搞个报表功能,每天晚上系统都要跑一下,生成报表。
我这系统一上线,好家伙,第一天跑着跑着就卡死了。
为啥?后来查半天,发现就是那个报表任务,跑起来太耗资源,把后面其他业务都拖慢了。

你看,这就是典型的作业和进程没搞好的问题。
那个报表任务,就是个“作业”,它得干完链接数据库、跑SQL、导数据、算统计、再打印出来这一套活儿。
但光有这任务不行啊,你得给它分配一个“进程”去干。
前年那个系统,我一开始没给这报表任务单独开进程,它就在一个正常的业务进程里跑,结果就跟抢饭吃一样,跟其他订单处理、库存查询什么的抢CPU、内存,当然就卡了。

后来我改成,每天固定时间,启动一个专门的进程,就干这个报表活儿。
这个进程里有专门的线程去干数据查询、计算这些活儿,不跟别的业务抢。
你看,这就好比以前生产线上,光有个生产任务单不行,你得配个专门的生产小组(进程),人(线程)和机器(CPU、内存)都配足了,才能按时完成任务(作业)。
这才没出问题。

再比如,前年我在深圳帮一个搞物流的公司做系统,他们那个路径优化功能,就是算哪个路线最省油最省时。
这功能特别消耗计算力,有时候后台跑起来,整台服务器都嗡嗡响,风扇转得飞快。
这你就得看进程监控了,发现就是那个路径优化的进程在狂吃资源。
这时候就得调整,比如限制它同时运行的线程数量,或者给它单独配点更好的CPU资源。
要是没进程支撑,这路径优化任务根本跑不起来,客户那边的派车调度就全乱套了。

所以说啊,作业和进程,那真是你中有我,我中有你。
作业是得干啥活儿,进程是提供干活的工具和资源。
没进程这锅饭,作业就没法做;光有作业这任务单,没进程给你配资源,那也白搭。
我以前就吃过这亏,任务跑不动,最后查来查去还是进程没配好。

?进程和线程的区别 进程和线程关系

呃,我昨天晚上写代码,突然卡住了,就是那种卡得特别彻底,鼠标点不动,屏幕黑屏的那种。
我盯着看,发现是线程出问题了,一个线程疯狂地访问了不该访问的内存地址,直接把整个进程都给干挂了。
这时候我就突然想到,线程这东西,真是方便又危险。

比如,我那个项目,有几十个线程在跑,处理各种数据,效率确实高。
但有时候调试起来真头疼,一个线程出bug,整个进程跟着完蛋。
记得有一次,我为了找那个出问题的线程,熬了两个通宵,最后发现是某个第三方库的线程不兼容导致的。
你说这事儿闹的,为了提高效率,结果搞得自己天天提心吊胆。

而且,线程之间共享内存也真是双刃剑。
有时候确实方便,比如我那个多线程的文件处理程序,多个线程同时读写同一个文件,速度确实快。
但有时候也麻烦,比如上次写数据库操作,几个线程同时修改同一个表,结果数据乱套了,搞得我重新跑了一遍数据。
这时候我就想,如果线程不能共享内存,那岂不是又要回到单线程的时代?那样效率又得降下来。

不过话说回来,进程和线程的区别,其实就像我那台电脑,我平时开浏览器、听音乐、写代码,这些都是进程,互不影响。
但写代码的时候,我可能会开好几个线程,比如一个线程负责编译,一个线程负责搜索资料,一个线程负责聊天。
这时候如果编译那个线程出了问题,其他的线程还能继续跑,不会影响我写代码。

所以啊,进程和线程,就像是人生中的各种选择,有时候选择独立,有时候选择共享,各有各的好处和坏处。
只是不知道,未来科技发展,会不会有更好的选择出现?