0%

重导和管道

重导和管道不能单独使用,需要配合其他命令一起使用

重导

重导可将命令结果输出到文件中,有两种形式”>”和”>>”

“>”是将结果输出到文件中,将该文件中的原内容覆盖

1
ls -a > dir.txt

“>>”是将结果追加到文件中

1
ls -a >> dir.txt
阅读全文 »

MySQL查询状态

在一个查询周期中,MySQL任何时刻都有一个状态,该状态可能会变化很多次,可以使用show full processlist来进行查看

  • Sleep 线程正在等待客户端发送新的请求
  • Query 线程正在执行查询或者正在将结果发送给客户端
  • Locked 该线程正在等待表锁,行锁不会体现在线程状态中
  • Analyzing and statistics 线程正在收集存储引擎的统计信息,并生成查询的执行计划
  • Copying to tmp table [on disk] 线程正在执行查询,并且将其结果都复制到一个临时表中,该状态要么是Group by操作,要么是文件排序操作,或者是union操作,如果这个状态有on disk标记,表示MySQL正在将一个内存临时表放到磁盘上
  • Sorting Result 线程正在对结果集进行排序
  • Sending data 线程可能在多个状态之间传送数据,或者在生成结果集,或者在向客户端返回数据

责任链模式

责任链模式(Chain of Responsibility Pattern)使多个对象都有机会处理请求,从而减少请求的发送者和接收者之间的耦合关系,为请求创建了一个接收者对象的链,沿着这条链传递该请求,直到有一个对象停止处理它为止。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,其本质是分离职责,动态组合

传递职责

核心概念

责任链模式

  • Handler 定义职责的接口
  • ConcreteHandler 实现职责的类
阅读全文 »

连接数问题

在使用mysql时有时候会报too many connections错误,这是连接数过多导致的,然后就会去修改max_connections参数,但是这个参数也不能无上限的增大,容易造成机器内存不足,还是需要找到为什么会有这么多连接的原因

网络IO

Linux网络IO模型

  • 阻塞IO模型 默认情况下,所有文件操作都是阻塞的。 在进程空间中调用recvfrom,其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误才返回,在此期间会一直等待。

  • 非阻塞IO模型 recvfrom从应用层到内核的时候,如果缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,然后轮询检查这个状态,看内核是否有数据到来

  • IO复用模型 linux中提供了select/poll,通过将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,这样select/poll就可以侦测多个fd是否处于就绪状态。不过其是顺序扫描且支持的fd数量有限。

    升级版的epoll基于事件驱动方式代替顺序扫描,当有fd就绪时,调用回调函数进行通知,性能更高

  • 信号驱动IO模型 通过系统调用sigaction执行一个信号处理函数(该系统调用会立即返回,进程继续工作,非阻塞)。当数据准备就绪时,为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据

    内核通知我们何时可以开始一个IO操作,还需要通过recvfrom来读取数据,在将数据从内核复制到自己的缓冲区

  • 异步IO 告知内核启动某个操作,并让内核在整个操作(包括数据从内核复制到用户自己的缓冲区)完成后通知。

    内核通知我们操作何时已经完成

阅读全文 »