上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: 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) 编辑
摘要: Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题,那么就看看Nginx的内存分配相关模型的具体实现。还有内存对齐的内容~~不懂的可以看看~~src/os/unix/Ngx_alloc.h&Ngx_alloc.c 先上源码:/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#ifndef _NGX_ALLOC_H_INCLUDED_#define _NGX_ALLOC_H_INCLUDED_#include #include void *ngx_alloc(size_t size, ngx_lo 阅读全文
posted @ 2013-06-25 13:57 cococo点点 阅读(2847) 评论(0) 推荐(2) 编辑
摘要: C语言中的内存分配与释放 对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容。相关问题 刚刚在一篇博文看到一个简单的问题://code1char* toStr() { ... 阅读全文
posted @ 2013-06-23 12:53 cococo点点 阅读(27349) 评论(9) 推荐(8) 编辑
摘要: 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem)。那就来看看这个文件吧!从简单的开始~~~src/os/unix/Ngx_socket.h&Ngx_socket.c 源码如下(可用Source Insight来看源码,不错的选择):/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#ifndef _NGX_SOCKET_H_INCLUDED_#define _NGX_SOCKET_H_INCLUDED_#include #define NGX_WRITE_SHUTDOWN S 阅读全文
posted @ 2013-06-21 16:54 cococo点点 阅读(3893) 评论(0) 推荐(1) 编辑
摘要: Linux epoll epoll是Kernel 2.6后新加入的事件机制,在高并发条件下,远优于select。epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024 //select最多同时监听1024个fd 当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。 所以在Nginx中采用了epoll来实现其高并发特性。工作方式 LT(level tr... 阅读全文
posted @ 2013-06-20 14:37 cococo点点 阅读(3280) 评论(3) 推荐(1) 编辑
摘要: Nginx基本数据结构 话说学习一种编程语言,例如C语言,我们首先学的也是数据结构,这是以后开发程序的关键。为了更好更方便的开发Nginx,Nginx自己实现了很多适合nginx的数据结构。Nginx中的数组 ngx_array_s是Nginx中的数组,原型为ngx_array_t。typedef struct { void *elts; //指向数据的指针 ngx_uint_t nelts; //数组中元素的个数 size_t size; //数组中每个元素的大小 ngx_uint_t... 阅读全文
posted @ 2013-06-19 22:27 cococo点点 阅读(3921) 评论(1) 推荐(0) 编辑
摘要: Nginx--connection&request 在Nginx中,主要包括了连接与处理两部分。connection 在src/core文件夹下包含有connection的源文件,Ngx_connection.h/Ngx_connection.c中可以找到SOCK_STREAM,也就是说Ngin... 阅读全文
posted @ 2013-06-19 07:51 cococo点点 阅读(20803) 评论(3) 推荐(12) 编辑
摘要: Nginx架构 Nginx全程是什么?Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器。daemon守护线程 nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和... 阅读全文
posted @ 2013-06-18 09:00 cococo点点 阅读(18936) 评论(13) 推荐(13) 编辑
摘要: Linux并发模型 目前可以实现并发程序的方法有Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型、Epoll模型。各种模型优缺点 Apache模型和TPC模型是最容易理解的,Apache模型在并发上是通过多进程实现的,而TPC模型是通过多线程实现的,但是这种方式在大量进程/线程切换时会造成大量的开销。 select模型是通过一种轮询机制来实现的。需要注意:Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.操作限制... 阅读全文
posted @ 2013-06-17 21:52 cococo点点 阅读(1703) 评论(1) 推荐(0) 编辑
摘要: Select server linux 的socket函数分为阻塞和非阻塞两种方式,比如accept函数,在阻塞模式下,它会一直等待有客户连接。而在非阻塞情况下,会立刻返回。我们一般都希望程序能够运行在非阻塞模式下。一种方法就是做一个死循环,不断去查询各个socket的状态,但是这样会浪费大量的cpu时间。解决这个问题的一个方法就是使用select函数。使用select函数可以以非阻塞的方式和多个socket通信。当有socket需要处理时,select函数立刻返回,期间并不会占用cpu时间。 select函数原型://Select 函数原型 int select(nfds, readfd.. 阅读全文
posted @ 2013-06-16 12:05 cococo点点 阅读(3378) 评论(2) 推荐(0) 编辑
摘要: 多进程实现C/S 把上次的多进程简单的添加一个fork就可以实现一个简单的多进程服务器。具体进程创建和使用的函数,有时间得总结一下了~~~~if(fork()==0){ char buffer[1024]; strcpy(buffer, "this is server! welcome!\n"); send(sock_client, buffer, 1024, 0); bzero(buffer,sizeof(buffer)); flag = recv(sock_client, buffer, 1024, 0); ... 阅读全文
posted @ 2013-06-15 22:27 cococo点点 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 多线程实现服务器//线程需要调用的函数void pthread_work(struct argc *argc2){ int flag; struct argc argc1; argc1.sock_clt = argc2->sock_clt; argc1.sock_serv = argc2->sock_serv; printf("%d,%d\n",argc1.sock_clt,argc1.sock_serv); char buffer[1024]; strcpy(buffer, "this is server! welcome!\n"); // 阅读全文
posted @ 2013-06-11 17:14 cococo点点 阅读(604) 评论(0) 推荐(0) 编辑
摘要: 简单的C/S//server.h#include "utl.h"class server{public: server(const short port); ~server(); int initServer(); void startListen(); //循环accept,可以通过继承来增加多线程private: struct sockaddr_in server_addr; int sock_serv;};//server.cc#include "server.h"#include "utl.h"server::server( 阅读全文
posted @ 2013-06-11 09:13 cococo点点 阅读(940) 评论(0) 推荐(0) 编辑
摘要: public继承 is-a的关系 public继承是一种is-a关系。也就是说适用于base classes(基类)身上的每一件事都一定适用于derived classes(继承类),每一个derived classes对象都是一个derived classes对象。class A{ void func(); ...}class B : public A{ ... }void func1(A a){ ...}B b;B.func(); // can call the func of Afunc1(B); // auto chuange to A 上面的例... 阅读全文
posted @ 2013-06-10 09:49 cococo点点 阅读(1410) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页