07 2013 档案

摘要:Linux 进程间通信 进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源。但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的传递,因此需要进程间数据传递、同步与异步的机制。分类统一主机间进程通信Unix进程间通信方式无名通道有名通道信号System V进程间通信方式信号量消息队列共享内存不同主机间进程通信RPCSocket消息队列IPC简单介绍下,所有相关的API函数:API函数用途msgget 创建一个新的消息队列 获取消息队列IDmsgsnd 向消息队列发送消息msgrcv从消息队列接受消息msgctl获... 阅读全文
posted @ 2013-07-25 11:30 cococo点点 阅读(1793) 评论(1) 推荐(2) 编辑
摘要:Nginx进程启动分析 worker子进程的执行循环的函数是ngx_worker_process_cycle (src/os/unix/ngx_process_cycle.c)。 其中,捕获事件、分发事件的函数是ngx_process_events_and_timers(cycle);static voidngx_worker_process_cycle(ngx_cycle_t *cycle, void *data){ ngx_int_t worker = (intptr_t) data; ngx_uint_t i; ngx_connection_t *... 阅读全文
posted @ 2013-07-22 16:52 cococo点点 阅读(3125) 评论(2) 推荐(0) 编辑
摘要:进程的状态转换 进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。进程状态执行态run:进程正在使用CPU等待态wait:进程正在等待I/O完成,不在使用也不能使用CPU就绪态ready:进程不在使用CPU,但已经纯备好用使用CPU 在特定的情况下,这三种状态可以相互转换。状态转换 就绪->执行, 当前运行进程阻塞,调度程序选一个优先权最高的进程占有处理机; 执行->就绪, 当前运行进程时间片用完; 执行->等待,当前运行进程等待键盘输入,进入了睡眠状态。 等待->就绪,I/O操作完成,被中断处理程序唤醒。 刚从其他状态进入就绪态的进程需要置 阅读全文
posted @ 2013-07-22 10:16 cococo点点 阅读(5704) 评论(1) 推荐(2) 编辑
摘要:IOCP模型 IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的Epoll。简介 IOCP模型属于一种通讯模型,适用于Windows平台下高负载服务器的一个技术。在处理大量用户并发请求时,如果采用一个用户一个线程的方式那将造成CPU在这成千上万的线程间进行切换,后果是不可想象的。而IOCP完成端口模型则完全不会如此处理,它的理论是并行的线程数量必须有一个上限-也就是说同时发出500个客户请求,不应该允许出现500个可运行的线程。目前来说,IOCP完成端口是.. 阅读全文
posted @ 2013-07-16 18:37 cococo点点 阅读(4145) 评论(0) 推荐(3) 编辑
摘要:Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程。 在Nginx中,master进程和worker进程是通过socketpair函数创建一对socket来实现,父进程与子进程之间的通信的。而这对socket被保存在进程结构体ngx_process中的channel[2]数组中,其中channel[0]为父进程的socket,channel[1]为子进程的socket。static voidngx_start_worker_processes(ngx_cycle_t *cycle, ngx_in.. 阅读全文
posted @ 2013-07-13 19:33 cococo点点 阅读(4050) 评论(1) 推荐(0) 编辑
摘要:/*This is an example of the SetConsoleCtrlHandler function that is used to install a control handler.When a CTRL+C signal is received, the control handler returns TRUE, indicating that it has handled the signal. Doing this prevents other control handlers from being called.When a CTRL_CLOSE_EVENT sig 阅读全文
posted @ 2013-07-08 14:27 cococo点点 阅读(841) 评论(0) 推荐(0) 编辑
摘要:Linux 进程 在用户空间,进程是由进程标识符(PID)表示的。从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程。一个 PID 在进程的整个生命期间不会更改,但 PID 可以在进程销毁后被重新使用,所以对它们进行缓存并不见得总是理想的。进程表示 在 Linux 内核内,进程是由相当大的一个称为task_struct的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(父和子)。struct task_struct { volatile long state; void *stac... 阅读全文
posted @ 2013-07-08 09:31 cococo点点 阅读(2955) 评论(5) 推荐(1) 编辑
摘要:守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。守护进程的特点 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用.. 阅读全文
posted @ 2013-07-03 00:20 cococo点点 阅读(3318) 评论(9) 推荐(4) 编辑
摘要:Nginx的启动过程 主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程。涉及到的基本函数源码: 1 /* 2 * Copyright (C) Igor Sysoev 3 * Copyright (C) Nginx, Inc. 4 */ 5 6 7 #include 8 #include 9 #include 10 11 12 static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cy... 阅读全文
posted @ 2013-07-02 22:01 cococo点点 阅读(3513) 评论(0) 推荐(0) 编辑
摘要:volatile 就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。(摘自 百度百科) volatile 影响编译器编译的结果,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。 告诉compiler不能做任何优化 表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。笔试... 阅读全文
posted @ 2013-07-02 19:10 cococo点点 阅读(581) 评论(0) 推荐(0) 编辑
摘要:A*算法/博弈树 前阵子考试学了A*算法、博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记。在这里感谢面试我的那位工程师~~A*算法一些重要的概念 启发式信息:用于帮助减少搜索量的与问题有关的信息或知识。 启发式搜索:使用启... 阅读全文
posted @ 2013-07-01 21:59 cococo点点 阅读(15527) 评论(7) 推荐(3) 编辑