Shawn's Blog

一个伪程序员的伪技术博客

0X00 多线程

多线程是个提高程序运行效率的好办法,本来要顺序执行的程序现在可以并行执行,可想而知效率要提高很多。但是多线程也不是能提高所有程序的效率。程序的两个极端是‘CPU密集型’和‘I/O密集型’两种,多线程技术比较适用于后者,因为在串行结构中当你去读写磁盘或者网络通信的时候CPU是闲着的,毕竟网络比磁盘要慢几个数量级,磁盘比内存慢几个数量级,内存又比CPU慢几个数量级。多线程技术就可以同时执行,比如你的程序需要发送N个http数据包(10秒),还需要将文件从一个位置复制到另一个位置(20秒),然后还需要统计另一个文件中’hello,world’字符串的出现次数(4秒),现在一共是要用34秒。但是因为这些操作之间没有关联,所以可以写成多线程程序,几乎只需要20秒就完成了。这是针对I/O密集型的,如果是CPU密集型的就不行了。比如我的程序要计算1000的阶乘(10秒),还要计算100000的累加(5秒),那么即使程序是并行的,还是会要用15秒,甚至更多。因为当程序使用CPU的时候CPU是通过轮转来执行的,IO密集型的程序可以在IO的同时用CPU计算,但是这里的CPU密集型就只能先执行一会儿线程1再执行一会儿线程2。所以就需要15秒,甚至会更多,因为CPU在切换的时候需要耗时。解决CPU密集型程序的多线程问题就是CPU的事情了,比如Intel的超线程技术,可以在同一个核心上真正的并行两个线程,所以称之为‘双核四线程’或者‘四核八线程’,我们这里具体的先不谈,谈我也不知道。

阅读全文 »

0x00 MariaDB的身世

自从MySQL被Oracle收购之后,社区就一直担心MySQL可能会被闭源或者一些其他的原因导致MySQL的支持出现问题。所以现在好多发行版本默认的数据库都从MySQL转移到了Mariadb。而且社区也开始大力支持Mariadb,再加上Mariadb的使用和API和MySQL完全一样,所以这里选择使用Mariadb而不是MySQL。

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。
MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自麦克尔·维德纽斯的女儿玛丽亚(英语:Maria)的名字。——————————维基百科

阅读全文 »

0X00 firewalld 守护进程

firewall-cmd命令需要firewalld进程处于运行状态。我们可以使用systemctl status/start/stop/restart firewalld来控制这个守护进程。firewalld进程为防火墙提供服务。

当我们修改了某些配置之后(尤其是配置文件的修改),firewall并不会立即生效。可以通过两种方式来激活最新配置systemctl restart firewalldfirewall-cmd --reload两种方式,前一种是重启firewalld服务,建议使用后一种“重载配置文件”。重载配置文件之后不会断掉正在连接的tcp会话,而重启服务则会断开tcp会话。

阅读全文 »

0X00 文件

** ‘文件’是进程创建的逻辑单元。 ** —《现代操作系统(原书第三版)》
文件我们再熟悉不过了,电脑磁盘上存的都是文件。在Windows里和Unix系列系统里,表面看上去文件之间还是有一点点小的区别。比如,在Windows里主要还是以文件的后缀名来标识文件具体是什么类型的,图片还是视频;在Unix系列里文件的后缀名就没那么重要,主要后缀名是用来帮助人们识别文件类型的,操作系统并不很关心。
** 真正的文件类型 ** 是文件的本质类型,不是我们常说的exe类型、doc类型、更不是什么图片类型和视频类型。在Windows下有常见的普通文件和目录。没错,目录其实是文件的。在Unix里,还有一些叫字符特殊文件和块特殊文件的。

阅读全文 »

0X00 Linux中的计划任务

我们使用Linux更多的时候是在服务器上,然而我们有的时候就需要让计算机在固定的某个时间做一些事情。比如我们就可能有有如下需求:

  1. 临时有事需要离开电脑,但是一个小时后需要备份某个目录里的文件
  2. 写了个爬虫去抓取某网站的新闻,每隔十分钟就去爬取一次
  3. 周期性的执行某脚本,但放在后台的话退出ssh就会被自动关掉
  4. 其实还有好多这种可能…………

在Linux中有两种常见的任务管理,一个是at也就是在某时做某事,另一个是crontab也就是周期性任务表。使用at可以方便地给Linux设置一个在什么时候做什么事的计划,用crontab可以方便地给Linux设置我要做某事,多久做一次。

阅读全文 »
0%