多线程、多进程、多核

从其它平台迁移而来 前言 线程、进程的概念实际上已经纠结N久了,不过好在多少有些了解了,但总感觉还不是那么通透。 碰巧晚饭时与室友争论了一个问题,与线程的问题很类同,为了能通俗易懂的给室友讲明白,着实消耗了不少脑细胞。所幸最终他表示明白了(至于是真是假便不清楚了,不过至少我自己感觉通透了许多)。 鉴于抱着一颗开源共享的心,便稍加整理,拿来浪一下啦! CPU 其实,CPU是个很笨的家伙,笨到只会做最简单的事,而且一次还只能做一件最简单的事,而它能做的所有的事掰着指头数来数去也就那么几件。多了、复杂了,抱歉,不会! CPU仅会做的那几件事呢,就叫做CPU指令。 虽然CPU这家伙很笨,但还是有优点的,而且这优点还很让人喜欢。什么优点呢?快!准! 时间片 虽然CPU只会那么几个指令,但是已经够了,因为那些复杂的事都可以用这些指令进行排列组合来完成。所以啊,CPU一点儿也不怕麻烦。 由于CPU干活又快又准,所以很多事都可以让他来做。但是CPU这小子实在是太傻愣傻愣了,为了防止这傻小子闷着头只顾做手头上的事,把其它事都抛到了脑后,就有个头脑还算灵光的家伙跑来指挥CPU,这个家伙就是操作系统(更准确的说是分时操作系统),也叫OS。 OS规定CPU做一件事只能用一小段时间(这一小段时间就叫时间片),而且时间到了必须放下手头的事,去做下一件事,不管手头上的事有没有做完。事实上OS把每一件事的进度都记录了下来,下次轮到这件事时就让CPU接着原来的进度继续干下去。 由于CPU干活实在是太快太快了,所以感觉就像同时在做所有安排给他的事。 进程&线程 不管是进程还是线程,其实都是任务。任务也分大小的,一个大任务可以包含若干小任务,而且一个大任务至少要有一个小任务。一个大任务就是一个进程,一个小任务就是一个线程。 把这些任务交给OS,OS就根据情况做规划,给每个任务分配合理的时间片,然后安排CPU来完成。 单线程&多线程 一个大任务只有一个小任务,那这个大任务就叫做单线程,否则就叫多线程。 举个栗子: 小明在唱歌,而且在唱歌是其它的事都不做。这就是单线程。 小明一边唱歌,一边跳舞。这就是多线程。 小明一边唱歌,一边吃饭。这也是多线程,只不过这两个小任务都用到了嘴巴,所以执行起来就会麻烦很多,解决麻烦的办法就是线程同步。 多进程 直接举栗子: 小明自己放风筝。这就是单进程。 小明和小红都在放自己的风筝。这是一种多进程,只不过两个进程是独立的。 小明和小红一起放大蜈蚣风筝。这是另一种多进程,进程之间需要配合,也存在类似多线程的麻烦。这方面的问题没有详细了解过,就不多扯了。 多线程&多进程 再次举栗子: 小明一边唱歌,一边跳舞。这是多线程,用的都是小明的身体(资源)。 小明唱歌,小红跳舞。这是多进程,各自用各自的身体(资源)。 小明和小红合唱。这也是多进程,各自用各自的身体(资源)。 多核 单核、多核是针对CPU来说的。 继续举栗子说明: 普通人。单核。 哪吒。多核。 如有不对之处,还望大侠指正!

2018-04-13 22:53:06 · 1 分钟 · 慢步道人

简单确定文件格式

从其它平台迁移而来 有时候,我们会下载到或者从邮箱接收到一些莫名其妙的文件——只有名字,没有后缀名(文件扩展名),排除不安全因素后,确定这就是我们想要的文件,但是不知道文件格式或者不知道用什么软件来打开查看,对于大多数人来说这可是个比较头疼的问题。 但是,如果掌握一些基础知识的话,这样的问题其实是很好解决的! 知识点一: 文件后缀名(扩展名)和文件格式没有半毛钱关系! 文件格式实际上是由文件开头的若干字节来描述的,这些文件描述称为文件头(注意,不是c/c++里的.h头文件)。 那么,后缀名是用来做什么的呢?后缀名仅仅是为了方便从文件名中知道文件是什么格式,一方面给用户(你,我,他)看,另一方面给操作系统看,由操作系统判断使用哪个阅读器、浏览器、工具等软件打开,而这些软件对文件的解析就是根据文件头的描述来进行的。 知识点二: 本质上所有的文件都是二进制文件! 文本、源码(其实也是文本)、word、excel、ppt、pdf、dll、exe、图片、压缩包……都是二进制文件,因为现代计算机系统只认识0和1。不信的话可以用十六进制工具打开来查看。 好了,有了这两个基础知识,我们就可以进行继续了。上面提到了十六进制工具,这里我们要使用的神器也正是它! 这是一张png图片,用十六进制打开后是这样的,可以明显看到有PNG字样。 这是一个pdf文件,也可以明显看到PDF字样。 就不再贴图了,套路就是这么个套路,下面就直接上整理好的常用的对应表了! 文件格式 文件头 bmp图片 42 4D (BM) png图片 89 50 4E 47 (‰PNG) jpg图片 FF D8 pdf文档 25 50 44 46 (%PDF) zip压缩包 50 4B (PK) rar压缩包 52 61 72 (Rar) 7z压缩包 37 7A (7z) docx、xlsx、pptx 50 4B (PK) dll或exe 4D 5A (MZ) 可看到,Microsoft Office 2007 及以上版本的 docx、xlsx、pptx 与 zip压缩包的文件头是一样的,是不是搞错了?没错,Microsoft Office 2007 及以上版本的 docx、xlsx、pptx 实际上就是一个 zip压缩包,不信的小伙伴儿们可以把后缀名改为zip用解压工具打开看看真面目。...

2018-03-31 16:33:46 · 1 分钟 · 慢步道人

GBK编码

从其它平台迁移而来 在软件开发过程中,尤其是涉及到数据库的项目,通常都会遇到字符编码的问题。 其中,中文字符集编码常用的有GB2312和GBK,以及万国码UTF8,另外还有GB18030。 ASCII码每个字符占一个字节;GB2312是GBK的子集,两个字符集都是每个字符占两个字节;GB18030是GBK的取代版本,每个字符占一个、两个或四个字节;UFT8是万国码,每个字符占一个、两个或三个字节。 下图是GBK字符编码表。 图是265*256的矩阵,表示两个字节可以表示的所有字符。水平方向表示高字节,从左至右为0000~FF00;垂直方向表示低字节,从上到下为0000~00FF。 左侧0区:0000~007F,ASCII码区。 右下色块区:8140~FEFE(需剔除a区即817F~FE7F),GBK编码区。 具体说明 GBK编码分三部分。 一、汉字区 2区:B0A1~F7FE,GBK/2,GB2312汉字区,GB2312汉字6763个。 GB13000.1扩充汉字区 3区:8140~A0FE,GBK/3,GB13000.1中的CJK汉字6080个。 4区:AA40~FEA0,GBK/4,CJK汉字和增补的汉字8160个。 二、图形符号区 1区:A1A1~A9FE,GBK/1,GB2312非汉字符号区。除GB2312的符号外,还有10个小写罗马数字和GB12345增补的符号。计符号717个。 5区:A840~A9A0,GBK/5,GB13000.1扩充非汉字区。包含BIG-5非汉字符号、结构符和汉字〇。计符号166个。 三、用户自定义区 A区:AAA1~AFFE,码位564个。 B区:F8A1~FEFE,码位658个。 C区:A140~A7A0,码位672个。

2017-11-30 10:46:25 · 1 分钟 · 慢步道人