Hunter的大杂烩 技术学习笔记

2006-09-10

从setjmp到getcontext,最后遇到了libpth

Filed under: Linux,技术话题 — hunter @ 3:13 am

最近在准备开始把系统重构一次,底层还是用app platform平台,但是
代码需要全部OO重新设计和分析一次,乘此机会,顺便把原来的设计和代码
中不合理的地方来个大扫除。
在设计的时候,遇到最大的问题,就是app platform只是一个事件驱动
的tcp server framework,单进程架构,在处理异步通信的时候,代码结构
会比较恶心:
void excute(command)
{
switch(state)
{
case start:
int iRetcode= GetUserIdRequest();
…..
state = wait_recv;
break;
case wait_recv:
int iUserId = GetUserIdResponse();
….
break;
}
}

(more…)

系统演进之路(2)

Filed under: 架构,电子商务 — hunter @ 3:09 am

随着业务逐渐复杂,我们发现原有的开发模式效率极其低下,尤其是纯粹业务处理的APP层,做异步处理时,状态机非常难以维护,在此基础上,我们开发出了 app platform, db platform等公共组件

xxx platform其实非常类似一个ejb 容器,开发人员已经可以把精力集中在业务逻辑上了,从网络层收发数据报、协议封解包上脱离了出来

但是效率还不够高,异步情况下,还是存在状态机的情况,尤其是当后期我们准备OO化整体设计的时候,这种模式就会导致设计的非常dirty,不易测试,我们需要一个POCO的模型!

系统演进之路

Filed under: 架构,电子商务 — hunter @ 2:30 am

早期为了赶进度,使用了最拿手的c/c++混合的进程模型

关注点主要在分布式的APP和DB架构上,提出了dbroute,appinterface等节点,以便水平扩展服务器来分摊压力

在应对web session的问题上,使用了分布式的session解决方案

这个阶段最大的收获是:

1. 分层不能过多

2. 业务复杂之后,原来的c风格开发模式的颗粒太大,会导致分工不均

3. 监控体系没有做好,压力上来之后,对优化方向没有理论指导

2006-06-05

struct to class convertor

Filed under: C++ — hunter @ 1:33 pm

下载

用于将struct 结构转换为 class 类声名

#ifndef SAMPLE_STRUCT_H
#define SAMPLE_STRUCT_H

#include

/* dfasdf */
//asdfasdf
typedef struct
{
    int  dwAbc; /* dfasdf */
    char cAbcd;
    int  adwAbcde[16];
}HAHA;
struct HAHA_1
{
    int  dwBbb; // asdfaf
    char cKkkk;
};

typedef struct _WAHAHA_{
    int  dwTestInt;
    char *strUserName;
    char  strUserNick[111];
}HAHA;

#endif
 

——————————————————————-

class CHAHA
{
private:
public:
        const int* GetAbcde();
        void SetAbcde();

        uint8_t GetAbcd();
        void SetAbcd();

        int GetAbc();
        void SetAbc();

};
class CHAHA_1
{
private:
public:
        uint8_t GetKkkk();
        void SetKkkk();

        int GetBbb();
        void SetBbb();

};
class C_WAHAHA_
{
private:
public:
        const char* GetUserNick();
        void SetUserNick();

        const char* GetUserName();
        void SetUserName();

        int GetTestInt();
        void SetTestInt();

};

2006-06-02

Linux SystemV MsgQ 4K原子性的传说检查

Filed under: Linux — hunter @ 3:59 pm
看了一下内核代码,似乎linux 的sysv msgq 没有 原子操作必须 < 4k的限制,
只是在内核存储的时候,是以每块4076的切割后存储。
DATALEN_MSG == 4096 – sizeof(struct msg_msg) == 4076

asmlinkage long sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg)
{
 struct msg_queue *msq;
 struct msg_msg *msg;
 long mtype;
 int err;
 
 if (msgsz > msg_ctlmax || (long) msgsz < 0 || msqid < 0)   return -EINVAL;  if (get_user(mtype, &msgp->mtype))
  return -EFAULT;
 if (mtype < 1)   return -EINVAL;

// 从用户空间拷贝数据到内核,同时把数据切割为DATALEN_MSG(4096 – sizeof(struct msg_msg))大小
// 每块内存用msg_msg格式组成链表形式
// 在分块拷贝时可能会被其他调用中断
(more…)
« Newer PostsOlder Posts »

Powered by WordPress