Articles

  • Linux/Unix 多线程通信

    线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用。 不过要注意的是线程间需要做好同步,一般用 mutex。 可以参考一些比较新的 UNIX/Linux 编程的书,都会提到 Posix 线程编程,比如《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 Linux 的消息属于 IPC,也就是进程间通信,线程用不上。

    • 使用多线程的理由之一是和进程相比,它是一种非常”节俭”的多任务操作方式。

      我们知道,在 Linux 系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。 而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

    • 使用多线程的理由之二是线程间方便的通信机制。

      对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。 线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。 当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为 static 的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

  • Sorting Algorithm

    This article describe some sorting algorithms.

  • Linux/Unix socket 网络编程

    Table of Contents

    基本概念

    OSI参考模型

    七层模型

    其七层模型从下到上分别为:

    1. 物理层(Physical Layer,PH)
    2. 数据链路层(Data Link Layer,DL)
    3. 网络层(Network Layer,N)
    4. 运输层(Transport Layer,T)
    5. 会话层(Session Layer,S)
    6. 表示层(Presentation Layer,P)
    7. 应用层(Application Layer,A)
  • Linux Daemon

    Introduction

    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。

  • Linux 进程间通信 (IPC)

    进程通信目的

    • 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
    • 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到
    • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)
    • 资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制
    • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变
  • Linux USB 驱动

    记得大一的时候试着为自己的双飞燕鼠标写驱动来着,结果写了一半,最后发现只实现了指针上下移动,左右移动有问题,然后就没下文了,这次想起来,已经过去了两年了,期间也陆续写过一些简单的内核模块的代码,现在突然旧鼠标坏了,就想着再试一次,顺便也练练手。

    References

    • http://www.ibm.com/developerworks/cn/linux/l-usb/index2.html
    • http://www.cnblogs.com/hoys/archive/2011/04/01/2002406.html
    • http://blog.sina.com.cn/s/blog_53689eaf01011f7u.html
    • http://www.cnblogs.com/image-eye/archive/2011/08/24/2152580.html
  • C++ 多线程编程总结

    在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。 设计C++程序时,总结起来可以从如下几点提高效率:

    • 并发
    • 异步
    • 缓存
  • Django Basics

    Table of Contents

  • MySQL Primer - Concepts

    Introduction

    This article described some basic usage of mysql server and introduce intermediate MySQL internals.

  • Runtime of Objective-C

    --  [1] 版本和平台
    --  [2] 与Runtime System交互
    --  [3] 方法的动态决议
    --  [4] 消息转发
    --  [5] 类型编码
    --  [6] 属性声明

    [1] 版本和平台

    Runtime System对于Objective-C来说就好比是它的操作系统,或者说是运行的支撑平台,它使得Objective-C代码能够按照既定的语言特性跑起来。相对于C/C++来说,Objective-C尽可能地把一些动作推迟到运行时来执行,即尽可能动态地做事情。因此,它不仅需要一个编译器,还需要一个运行时环境来执行编译后的代码。

    Runtime System分为Legacy和Modern两个版本,一般来说,我们现在用的都是Modern版本。Modern版本的Runtime System有一个显著的特征就是“non-fragile”,即父类的成员变量的布局发生改变时,子类不需要重新编译。此外,还支持为声明的属性进行合成操作(即@property@synthesis)。