/* * File: ms_thread.h * Author: Mingqiang Zhuang * * Created on February 10, 2009 * * (c) Copyright 2009, Schooner Information Technology, Inc. * http://www.schoonerinfotech.com/ * */ /** * Asynchronous memslap has the similar implementation of * multi-threads with memcached. Asynchronous memslap creates * one or more self-governed threads; each thread is bound with * one CPU core if the system supports setting CPU core * affinity. And every thread has private variables. There is * less communication or some shared resources among all the * threads. It can improve the performance because there are * fewer locks and competition. In addition, each thread has a * libevent to manage the events of network. Each thread has one * or more self-governed concurrencies; each concurrency has one * or more socket connections. All the concurrencies don't * communicate with each other even though they are in the same * thread. */ #ifndef MS_THREAD_H #define MS_THREAD_H #include #include "ms_conn.h" #ifdef __cplusplus extern "C" { #endif /** Time relative to server start. Smaller than time_t on 64-bit systems. */ typedef unsigned int rel_time_t; /* Used to store the context of each thread */ typedef struct thread_ctx { uint32_t thd_idx; /* the thread index */ uint32_t nconns; /* how many connections included by the thread */ uint32_t srv_idx; /* index of the thread */ int tps_perconn; /* expected throughput per connection */ int64_t exec_num_perconn; /* execute number per connection */ } ms_thread_ctx_t; /* Used to store the private variables of each thread */ typedef struct thread { ms_conn_t *conn; /* conn array to store all the conn in the thread */ uint32_t nactive_conn; /* how many connects are active */ ms_thread_ctx_t *thread_ctx; /* thread context from the caller */ struct event_base *base; /* libevent handler created by this thread */ rel_time_t curr_time; /* current time */ struct event clock_event; /* clock event to time each one second */ bool initialized; /* whether clock_event has been initialized */ struct timeval startup_time; /* start time of the thread */ } ms_thread_t; /* initialize threads */ void ms_thread_init(void); /* cleanup some resource of threads when all the threads exit */ void ms_thread_cleanup(void); #ifdef __cplusplus } #endif #endif /* end of MS_THREAD_H */