上一页 1 2 3 4 5 6 7 ··· 17 下一页
摘要: 默认的编译选项是没有pthread的,所以要自己添加:参考:http://hi.baidu.com/u_soa/item/9d6cc40b7e9d76eb3499024d错误:undefined reference to 'pthread_create'解决:Project -> Build options -> Linker settings -> Link libraries 里加上pthread这样就解决啦!非常感谢老游网友! 阅读全文
posted @ 2013-09-23 21:38 hailong 阅读(2756) 评论(0) 推荐(0) 编辑
摘要: 生产者和消费者问题:当协程调用yield时,从一个悬而未决的resume中返回。简单的协程练习:function receive() local status,value = coroutine.resume(producer) return status,valueendfunction send(x) coroutine.yield(x)endproducer = coroutine.create(function() local x = 0 while true do x = x+1 if(x > 10) then ... 阅读全文
posted @ 2013-09-23 10:19 hailong 阅读(169) 评论(0) 推荐(1) 编辑
摘要: 按照书上写的,不知道为什么有问题://已解决,参考最新的blog,哈哈#include #include #include #include struct foo{ int f_count; pthread_mutex_t f_lock;};struct foo* AllocFoo(){ foo* lpFoo = (foo*)malloc(sizeof(struct foo)); if(NULL != lpFoo) { lpFoo->f_count = 1; if(0 != pthread_mutex_init(&lpFoo->f_lo... 阅读全文
posted @ 2013-09-23 07:22 hailong 阅读(316) 评论(0) 推荐(1) 编辑
摘要: http://blog.ddup.us/?p=280这篇博客说的很清楚,赞一个:在编写服务端软件的时候,如何处理各种I/O事件是其中很重要的一部分。在Unix Network Programming中介绍了5种Unix/Linux下可用的I/O编程模型:1)阻塞式I/O; 2)非阻塞式I/O; 3)I/O复用; 4)信号驱动式I/O; 5)异步I/O。这几种都是基本的I/O编程模型,可以单独使用其中一种,也可以组合使用。为了应对高并发量的情形,在C10K Problem中另外总结了5种高性能的I/O编程模型:1) 单线程非阻塞式水平触发I/O(Serve many clients with e 阅读全文
posted @ 2013-09-20 14:31 hailong 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 今天看到Lua程序设计第11章了,表示按照书中的例子打出来,但是不知道正确写用:List = {}function List.new () return {first = 0, last = -1}endfunction List.pushleft (list, value) local first = list.first - 1 list.first = first list[first] = valueendfunction List.pushright (list, value) local last = list.last + 1 list.las... 阅读全文
posted @ 2013-09-20 05:56 hailong 阅读(1564) 评论(4) 推荐(0) 编辑
摘要: http://oss.org.cn/kernel-book/ch13/13.6.1.htminit进程的建立Linux将要建立的第一个进程是init进程,建立该进程是以调用kernel_thread(init,NULL,0)这个函数的形式进行的。init进程是很特殊的——它是Linux的第一个进程,也是其它所有进程的父进程。让我们来看一下它是怎样产生的。在调用kernel_thread(init,NULL,0)函数时,会调用main.c中的另外一个函数——init()。请注意init()函数和init进程是不同的概念。通过执行inin()函数,系统完成了下述的工作:·建立dbflus 阅读全文
posted @ 2013-09-19 23:45 hailong 阅读(751) 评论(0) 推荐(0) 编辑
摘要: 按照书上码了下,但运行有问题,暂时不知道原因:function send (x) coroutine.yield(x)endfunction producer() return coroutine.create( function () while true do local x = 1 send(x) end end)endfunction receive(prod) local status, value = coroutine.resume(prod) return valueendfunction filter (prod) return coroutine.creat... 阅读全文
posted @ 2013-09-19 15:33 hailong 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 迭代器并没有真正的迭代,真正迭代的是for循环。而迭代器为每次迭代提供成功后的返回值。function allwords(f)for line in io.lines do for word in string.gmatch(line,"%w+") do f(word) end endend一个迭代器接受函数为参数,就完成了真正的迭代功能了。好强大! 阅读全文
posted @ 2013-09-19 09:09 hailong 阅读(156) 评论(0) 推荐(0) 编辑
摘要: Lua很火啊,而且跟C,c++可以无缝结合,表示很给力,算是我的第三门语言吧,哈哈!在官网上下载了源码了,和windows版的,表示编译器也很给力,直接可以用SciTE就可以写代码了。a = 1;b = 2;print("%s",a+b)输出:[C]: ?>Exit code: 1>lua -e "io.stdout:setvbuf 'no'" "hello.lua" %s 3>Exit code: 0很给力,有木有,哈哈 阅读全文
posted @ 2013-09-17 22:01 hailong 阅读(1039) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.cmnsoft.com/wordpress/?p=248感谢原作者。我在此整理一下:完成端口(IOCP)是WINDOWS平台上特有的一种技术。要使用IOCP技术,就要用到微软的WSA(windows socket api)。进行网络编程的套接口(socket)有UNIX套接口、伯克利套接口、WSA。其中使用最多的是伯克利套接口,因为他可在UNIX、WINDOWS、OS/2等计算机上使用。WSA套接口比伯克利套接口多了WSA三个字母。伯克利套接口:socket()、recv()、send()等。WSA套接口:WSASocket()、WSARecv()、WSASend( 阅读全文
posted @ 2013-09-17 17:54 hailong 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 在win7下没问题,在xp下居然显示不出来,表示巨不理解:好吧,即便是捕获到win消息也不见有苗头出来:WM_SIZEwParam == SIZE_RESTORED ) 阅读全文
posted @ 2013-09-17 17:02 hailong 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 表示还是自己看MSDN最直接,别人的介绍都是嚼剩下,有木有?IO完成端口为在多处理器系统处理多个异步IO请求提供一个高效的线程模型。当一个进程新建一个完成端口,操作系统新建一个目的为服务这些请求的队列对象。通过利用IO完成端口与相关联的预先分配的线程池而不是新建线程来处理当前请求,处理多个并发的异步IO请求会更快更有效。IO完成端口如何工作函数CreateIoCompletionPort创建一个IO完成端口,并在这个端口上关联一个或多个file【文件描述符】。当在这些操作符上的一个或者多个的一个异步IO操作完成时,一个IO完成包(packet)就进入与IO完成端口关联的先进先出队列。这个机制的 阅读全文
posted @ 2013-09-17 12:04 hailong 阅读(1135) 评论(0) 推荐(0) 编辑
摘要: 这三个函数都可以创建新的线程,但都是如何创建的呢?当然MSDN文档最权威:Creates a thread to execute within the virtual address space of the calling process.在调用进程的虚拟地址空间里创建一个线程用CreateThread;To create a thread that runs in the virtual address space of another process, use theCreateRemoteThreadfunction.如果在另一进程的虚拟地址空间创建线程用CreateRemoteThr 阅读全文
posted @ 2013-09-16 17:57 hailong 阅读(918) 评论(0) 推荐(0) 编辑
摘要: 服务器端对一个客户端来了就开启一个工作线程,最多可接受64个。具体看代码:#pragma once#include #include #pragma comment(lib, "ws2_32.lib")#define MaxClient 64class MyTCPSocket{public: MyTCPSocket(void); ~MyTCPSocket(void); bool Init(); bool UnInit(); bool CreateSocket(); bool Bind(unsigned aPost,const char* aAdress); ... 阅读全文
posted @ 2013-09-16 15:07 hailong 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 周五去一个公司打了个酱油,面试官问我:你封装过socket没?言下之意是问我实际写过底层代码没,我悻悻地说写过点。PS:说实话木有封装过,今天无聊就来封装下。话说写了这么久C++,底层用c来写还是灰常爽的,C++把它包起来很好看而且好用。嗯嗯,言归正传,创建了MyTCPSocket:问题记录1:一旦来了新的链接,就创建一个work线程来处理,但是遇到了小问题:#pragma once#include #include #pragma comment(lib, "ws2_32.lib")static DWORD WINAPI WorkerFun(LPVOID aData);c 阅读全文
posted @ 2013-09-15 21:13 hailong 阅读(419) 评论(0) 推荐(0) 编辑
摘要: http://blog.ci123.com/wobushizhanghua/entry/246311先后查看了haproxy,l7sw和lighttpd的 相关源码,无一例外,他们一致认为多路复用是性能最好的服务器架构。事实也确实应该如此,进程的出现一方面就是为了保存任务的执行上下文从而简化应用程序 设计,如果程序的逻辑结构不是很复杂,那么用整个进程控制块来保存执行上下文未免有些大材小用,加上进程调度和其他的一些额外开销,程序设计上的高效很可 能会被执行时的低效所抵消。代价也是有的:程序设计工作将更加具有挑战性。体系结构选定之后,我们就要考虑更加细节的部分,比如说用什么操作系统,用操作系统提供 阅读全文
posted @ 2013-09-13 21:22 hailong 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 不能小看这些基本的数据结构,写了才发现还是会有问题出现的。有码有真相:#pragma onceclass MyStack{public: MyStack(void); ~MyStack(void); void Push(int aValue); int Top(); void Pop(); void PrintAll();private: int* m_pData; int m_Len; int m_Top;}; #include "MyStack.h"#include #include #include #include MyStack::MyStack(void):m_ 阅读全文
posted @ 2013-09-10 11:29 hailong 阅读(301) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/zhiranok/archive/2012/05/13/cpp_multi_thread.html、问题:用postMsg和sendMsg貌似会有的消息被漏掉!显然不怎么靠谱啊,还是自己做的比较好! 阅读全文
posted @ 2013-09-09 16:30 hailong 阅读(172) 评论(0) 推荐(0) 编辑
摘要: IOCP是win32下的异步IO,利用线程池来异步处理IO请求。这里要分析一下异步调用,跟同步调用不同,异步调用 调用了就马上返回,但是还留下个话:有事情了马上通知我,我会处理滴。恩恩,这很符合我的个性,不愿意干等,现在不是都有手机吗,哈哈。非阻塞调用虽然不会挂起线程,立即返回结果,但还是需要程序员去轮询调用,以得到结果,就是问下:来了没。没来就马上走人,但还是一遍一遍地去问。会不会腿也累了,嗓子也干啦?哈哈IOCP并不是对每个客户请求都开一个线程,这样子对高并发无疑是一种很大的资源负担,是开n个线程,一般是core*2,然后把所有的请求投递到消息队列里,然后提起的线程去完成任务。 阅读全文
posted @ 2013-09-09 09:35 hailong 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 表示之前对semaphore信号量木有神码概念。比较纳闷这玩意要干嘛,好吧继续stackflow:Mutex can be released only by thread that had acquired it, while you can signal semaphore from any other thread (or process), so semaphores are more suitable for some synchronization problems like producer-consumer.意思就是会所semaphore可以被任何线程或者进程释放,在生产者和消费 阅读全文
posted @ 2013-09-06 15:48 hailong 阅读(1022) 评论(0) 推荐(0) 编辑
摘要: 之前只是用过 关键段来对同进程不同线程进行互斥,防止对同一份资源或代码段的竞争;mutex可以理解为不同进程或者同一进程内防止对同一份资源的竞争;event更多的是同步,当然也是不同进程或者同一进程,用于事件的同步,要先做A再做B,这时候就可以用Event来通知;嗯,我立即的可能还是有问题的,还是收录些大牛的评论吧:You use a mutex to ensure that only one thread of execution can be accessing something. For example, if you want to update a list that can po 阅读全文
posted @ 2013-09-06 15:34 hailong 阅读(1796) 评论(0) 推荐(0) 编辑
摘要: #pragma onceclass MyQueue{public: MyQueue(); ~MyQueue(); void Insert(int aValue); int Top(); void Pop(); void PrintQueue(); void PrintHead();private: int GetIncreIndex(const int& aIndex);private: int* m_pData; int m_Length; int m_Count; int m_Head; int m_Tail;}... 阅读全文
posted @ 2013-09-05 14:30 hailong 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 1。上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting! 阅读全文
posted @ 2013-09-03 13:04 hailong 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 今天又写了delete的部分,时间就这么被一天天地浪费了,我感到十分惋惜呀 1 #pragma once 2 #include "stdio.h" 3 4 struct Node 5 { 6 Node(int aValue) 7 :m_Value(aValue) 8 ,m_pLeft(NULL) 9 ,m_pRight(NULL)10 ,m_pParent(NULL)11 {12 13 }14 int m_Value;15 Node* m_pLeft;16 Node* m_pRig... 阅读全文
posted @ 2013-08-29 13:55 hailong 阅读(192) 评论(0) 推荐(0) 编辑
摘要: http://codemacro.com/2012/08/29/mmo-chat-server/ 阅读全文
posted @ 2013-08-28 12:28 hailong 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 之前写的服务器端 表示都无法收到client发的数据,找不到原因,原来是有个socket接收数据缓冲木有设置,现在设置后就可以正常收到数据啦!server端:#include #include #include #pragma comment(lib, "ws2_32.lib")#define MYPORT 1234 // the port users will be connecting to#define BACKLOG 5 // how many pending connections queue will hold#define BUF_SIZE 200int fd 阅读全文
posted @ 2013-08-25 21:48 hailong 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 用select的时候 设置超时时间 就有一些数据收不到,当设置为轮询就可以啦。这不科学啊!为毛?#include #include #include #pragma comment(lib, "ws2_32.lib")#define MYPORT 1234 // the port users will be connecting to#define BACKLOG 5 // how many pending connections queue will hold#define BUF_SIZE 200int fd_A[BACKLOG]; // accepted connec 阅读全文
posted @ 2013-08-25 21:28 hailong 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 算法导论第10章的东西,感觉用双链表真心简单,就是有点浪费空间,但是时间复杂度O(1):#include struct LinkNode{ LinkNode(): m_Value(-1) , m_pPreNode(NULL) , m_pNextNode(NULL) { } int m_Value; LinkNode* m_pPreNode; LinkNode* m_pNextNode;};class Queue{public: void Init() { m_pHeadNode = new LinkNod... 阅读全文
posted @ 2013-08-25 15:32 hailong 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 慢慢修改:#include #include #include #define PORT 5010#define MSGSIZE 1024int BytesSum = 0;#pragma comment(lib, "ws2_32.lib")DWORD WINAPI WorkerThread(LPVOID lpParameter);void InitWinSocket() { WSADATA wsaData; WSAStartup(0x0202, &wsaData);}#define ListenQ 10int main(){ InitWinSocke... 阅读全文
posted @ 2013-08-20 07:56 hailong 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 之前光看理论是不行滴,一定要实践,实践啊,不然永远都是门外汉!!嗯嗯,把找到的一段源码贴上先,稍微修改了一下:#include #include #include #define PORT 5010#define MSGSIZE 1024int BytesSum = 0;#pragma comment(lib, "ws2_32.lib")DWORD WINAPI WorkerThread(LPVOID lpParameter);void InitWinSocket() { WSADATA wsaData; WSAStartup(0x0202, &wsaDa... 阅读全文
posted @ 2013-08-19 12:56 hailong 阅读(719) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 17 下一页