管道符其实也是异曲同工,把一个进程的输出流和另一个进程的输入流接起一条「管道」,数据就在其中传递 , 不得不说这种设计思想真的很巧妙:
到这里,你可能也看出「Linux 中一切皆文件」设计思路的高明了,不管是设备、另一个进程、socket 套接字还是真正的文件,全部都可以读写,统一装进一个简单的 files 数组,进程通过简单的文件描述符访问相应资源,具体细节交于操作系统,有效解耦 , 优美高效 。
首先要明确的是,多进程和多线程都是并发,都可以提高处理器的利用效率 , 所以现在的关键是,多线程和多进程有啥区别 。
为什么说 Linux 中线程和进程基本没有区别呢,因为从 Linux 内核的角度来看 , 并没有把线程和进程区别对待 。
我们知道系统调用 fork() 可以新建一个子进程,函数 pthread() 可以新建一个线程 。但无论线程还是进程,都是用 task_struct 结构表示的,唯一的区别就是共享的数据区域不同。
换句话说 , 线程看起来跟进程没有区别,只是线程的某些数据区域和其父进程是共享的 , 而子进程是拷贝副本,而不是共享 。就比如说 , mm 结构和 files 结构在线程中都是共享的 , 我画两张图你就明白了:
所以说,我们的多线程程序要利用锁机制 , 避免多个线程同时往同一区域写入数据,否则可能造成数据错乱 。
那么你可能问,既然进程和线程差不多,而且多进程数据不共享,即不存在数据错乱的问题,为什么多线程的使用比多进程普遍得多呢 ?
因为现实中数据共享的并发更普遍呀,比如十个人同时从一个账户取十元,我们希望的是这个共享账户的余额正确减少一百元,而不是希望每人获得一个账户的拷贝,每个拷贝账户减少十元 。
当然 , 必须要说明的是,只有 Linux 系统将线程看做共享数据的进程,不对其做特殊看待,其他的很多操作系统是对线程和进程区别对待的,线程有其特有的数据结构,我个人认为不如 Linux 的这种设计简洁,增加了系统的复杂度 。
在 Linux 中新建线程和进程的效率都是很高的,对于新建进程时内存区域拷贝的问题,Linux 采用了 copy-on-write 的策略优化,也就是并不真正复制父进程的内存空间,而是等到需要写操作时才去复制 。所以 Linux 中新建进程和新建线程都是很迅速的。
linux命令之ls -alls -al命令来观察文件权限,每个文件的权限都用10位表示,其中第一段占1位,表示第一个字符代表这个文件的类型(目录,文件或链接文件) 。
若为“d”则是目录,若为“-”则是文件,若为“l”则表示链接文件,若为“”则表示为设备文件里面的可供存储的周边设备,若为“c”则表示为设备文件里面的串行端口设备,如键盘鼠标 。
第二段占3位,表示权限,均为[rwx]的三个参数的组合 。其中r表示可读,w表示可写,x表示可执行,如果没有权限 , 则会显示减号“-” 。
扩展资料:
Linux命令注意事项:
Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说 , 如果你输入的命令大小写不对的话 , 系统是不会做出你期望的响应的 。
Linux常用的命令:
clear , 这个命令是用来清除屏幕的,它不需要任何参数,和dos下面的cls具有相同的功能,如果你觉得屏幕太紊乱 , 就可以使用它清除屏幕上的信息 。
目录切换(cd),使用cd(Change Directory)命令可以在不同目录之间切换 。
列出目录中的文件(ls),在Linux命令行终端中使用的最多的命令就是这个ls,它可以帮助我们列出当前目录下都有哪些文件 。
- redis linux安装包 linux下redis包
- redis map底层实现 redis多个map命令
- redis底层结构 redis架构讲解
- mongodb哪些企业使用 mongodb适合做业务系统吗
- 如何在戴尔服务器上部署操作系统? 戴尔服务器os怎么部署
- mongodb中如何嵌入文档 mongodb嵌入式linux使用
- mongodb日志系统设计 基于mongodb日志统计
- mongodb 存储方式 mongodb底层存储方式
- linuxmongodb启动服务 linux-mongodb
- redis系统性能
