技术分享 -- 193




一、加锁以及防止程序意外崩溃每台机器上布2个 schedule 进程,在rabbitmq中放一个任务键值,两个进程哪个取到这个键即进行后续工作,另一个处于等待状态当工作处理完毕,重新插入该键值,如果插入失败,直接退出,插入成功则ack 二、集群控制及调度周期控制在缓存中建立 id => schedule_time 的对应关系,每次获取当前时间以前的所有ID,然后进入第三步,处理结束后,zadd,如果调度程序中途退出,可以保证该id被调度 三、减轻MYSQL压力以及防止缓存意外崩溃将数据库中字段组成xml存入缓存,调度程序如果在缓存中没有查到ID(缓存意外崩溃),那么到数据库中差找字段插入缓存,否则直接从缓存读取一个守护进程定时同步数据库与缓存之间的数据 
#技术帖    #技术分享    #work    #工作   
问题/* * file: main.c * author: 龙泉居士 * date: 2012-12-22 05:23 */ #include <pthread.h> #include <stdio.h> #include <stdlib.h> #define NUMBER_OF_THREADS 10 void *print_hello_world (void *tid) { printf ("Hello World from thread %d\n", tid); pthread_exit (NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUMBER_OF_THREADS]; int status, i; for (i=0; i<NUMBER_OF_THREADS; ++i) { printf ("Main Hear, Creating thread %d\n", i); status = pthread_create (&threads[i], NULL, print_hello_world, (void *)i); if (sta
#技术帖    #linux    #unix    #c语言   
问题C++ programming language 第309页的例子:template <class C> class Basic_ops //基本操作类 { public: bool operator== (const C&) const; bool operator!= (const C&) const; // ... const C& derived () const //获得操作访问权 { return static_cast <const C&> (*this); } }; template <class T> class Math_container : public Basic_ops < Math_container<T> > //具体实现的容器类 { public: size_t size() const; T& operator[] (size_t); const T& operator[] (size_t) const; // ... }; 这样,使得有关容器的基本操作定义可以与容器本身的定义分开,而且只需定义一次&n
#读书笔记    #技术帖    #c++    #cpp   
问题难道在栈上也可以动态开辟数组了/* * file: main.c * author: 龙泉居士 * date: 2012-11-20 06:12 */ #include <stdio.h> int main () { int n; scanf ("%d", &n); int a[n], i; for (i=0; i!=n; ++i) { int x; scanf ("%d", &x); a[i] = x; } for (i=0; i!=n; ++i) printf ("%d ", a[i]); printf ("\n"); return 0; } 无聊中写了一个程序居然编译通过运行正常,这这这。。。什么状况。。。整个三观都颠覆了,这样的程序不应该可以编译通过啊,难道在栈上也可以动态开辟数组? 解答Variable-length array,在这里有叙述: For example, the GNU C Compiler allocates 
#技术帖    #linux    #unix    #技术分享   
问题在C++ programming language一书的第九章中描述了C++的单一定义规则,ODR,根据这一规则,“一个inline函数必须在需要用他的每个编译单位里通过完全一样的定义来定义”并且举了例子:file1.c:inline int f(int i) { return i; } file2.c:inline int f(int i) {return i+1;} 书中说这个例子是非法的,因为在两个编译单位中的定义不完全相同那么,下面是我写的一个代码,也是我的问题:我的程序分为main.cc、func.cc和function.h三个文件,main.cc和func.cc中定义了两个如上面反例所写的同名inline函数,他们的函数体并不相同,function.h中是这个inline函数的声明:/* * file: main.cc * author: 龙泉居士 * date: 2012-10-17 04:37 */ #include <iostream> #include "function.h" using namespace std; int main () { f(3); return 0; } inline void f (int a) { cout <<
#读书笔记    #技术帖    #c++    #cpp   
问题fork调用只会复制调用线程,既然fork复制父进程地址空间中的全部内容,为什么只复制调用线程?难道线程不在进程的地址空间中吗? 解答:进程的地址空间主要是指内存的部分,而是否只复制调用线程,这是操作系统决定的特性 
#技术帖    #unix    #技术分享    #线程   
问题一发现在CGI中父进程和子进程不能同时读写,为什么会这样,在父进程完全不读写的情况下子进程读写没有问题 问题二这个问题因为另一个问题的启发,冥冥之中觉得应该可以解决,只是现在学识的不足,没有什么想法,另一个问题就是:#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main () { printf ("please input the loop time:\n"); int t, i; scanf ("%d", &t); FILE *f; f = fopen("forkfile", "a"); for (i=0; i!=t; ++i) { fork(); fprintf (f, "-"); printf ("-"); } fclose(f); return 0; }  为了及时地释放资源,于是改了一下,改成了下面这样:#include <stdio.h> #incl
#技术帖    #c语言    #进程    #fork   
引言今天一个同学问我结构体怎么用,他说之前可以运行的代码突然不能运行了,说编译器报的错是“undeclared”,但是明明在h文件中定义了这个结构体大体上代码是这样的://main.h struct Node { int value; Node *next; }; //main.c Node *n = (Node *)malloc(sizeof(Node)); 看上去并没有问题,可是编译器确实报了undeclared错,这是为什么呢?下面就三个问题说一下 结构体C语言中,结构体是一个非常常用的基本的语言特性,其优势在于,将数据进行封装,但是C语言中的结构体和C++中的struct是有着本质区别的,C++中的struct并不是传统意义上的结构体,而是默认为public的类,C语言中的struct中是绝对不允许有函数的,但是在C++中的struct是可以的,这是因为在C++中,struct并不是指结构体,只是默认为public的class,因此在显式声明类访问权限的例子中,struct和class是完全没有任何区别的,这也就是为什么在.cc的工程中可以使用的struct的定义和使用方法在.c的工程中却不行,因为C语言中的struct和C++中的struct根本就是两种完全不同的东西,只是有的时候可以做相同的事而已,两者本质上
#技术帖    #c语言    #结构体    #技术分享   
概述C99为C语言添加了很多新的特性,尤其在结构体的使用中,有了新的十分方便的功能 复合常量传统的C语言没有办法生成匿名结构值,必须使用临时结构变量活一个小结构生成函数:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { Point pt; pt.x=3; pt.y=5; printpoint (pt); return 0; } 在C99中,这一情况得以改善,因为C99中引入了“复合常量”的概念复合常量的一种形式就可以允许结构常量,例如,我们可以如下面这样调用:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { printpoint ((Point){3, 5}); return 0; } 或者:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { printpoint (
#技术帖    #c语言    #struct    #结构体   
概述最近一直在看《现代操作系统》这本书,此前对操作系统只是有一个基本的认识,在笔试面试中吃过不少亏,所以觉得这方面的欠缺的知识亟待去补充,于是开始了这本书的研读现在刚刚读完线程这个部分,对线程、进程有了一些自己的认识,也不知道理解是不是准确 进程简单的说进程就是一个程序第一次执行,程序是储存在磁盘上的文本部分,载入内存开始执行后就是一个进程,进程是独占CPU等资源的,CPU可以在短时间内不停地切换进程来实现多进程并行执行的假象 线程由于人们日益增长的需要,只有进程的并行显得效率很低,而且各进程之间不能共享资源有时是无法完成某些工作的,因此,诞生了切换更加快速的“轻量级进程” -- 线程,一个进程可以有多个线程,和多进程并行执行的原理一样,通过不断切换实现多线程并行执行的假象,但是这个切换时间只有纳秒级,要比进程的并行执行效率高得多 多线程的好处传统的进程只有一个调用线程,指令顺序执行,这样一个进程在某一时刻只能选择做一件事,比如对于文件下载程序,如果没有多线程,那么下载进度条将无法与下载进度保持真正的一致,因为如果进程去更新进度条,那么就一定会阻塞下载,但是实现多线程后,每件事都可以让不同的线程来完成,这样实现了进程内的并行处理,如果每件事占用CPU运算的10%,多线程让CPU使用率提升到了30%当然,多线程也有很多诸如维护等方面的
#技术帖    #操作系统    #os    #技术分享   



京ICP备15018585号