diff options
Diffstat (limited to 'memcached.c')
-rw-r--r-- | memcached.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/memcached.c b/memcached.c index 5a8fc8e..0e96aa9 100644 --- a/memcached.c +++ b/memcached.c @@ -189,6 +189,7 @@ static void settings_init(void) { settings.factor = 1.25; settings.chunk_size = 48; /* space for a modest key and value */ settings.num_threads = 4; /* N workers */ + settings.num_threads_per_udp = 0; settings.prefix_delimiter = ':'; settings.detail_enabled = 0; settings.reqs_per_event = 20; @@ -2437,6 +2438,7 @@ static void process_stat_settings(ADD_STAT add_stats, void *c) { APPEND_STAT("growth_factor", "%.2f", settings.factor); APPEND_STAT("chunk_size", "%d", settings.chunk_size); APPEND_STAT("num_threads", "%d", settings.num_threads); + APPEND_STAT("num_threads_per_udp", "%d", settings.num_threads_per_udp); APPEND_STAT("stat_key_prefix", "%c", settings.prefix_delimiter); APPEND_STAT("detail_enabled", "%s", settings.detail_enabled ? "yes" : "no"); @@ -3912,7 +3914,7 @@ static int server_socket(const char *interface, if (IS_UDP(transport)) { int c; - for (c = 0; c < settings.num_threads; c++) { + for (c = 0; c < settings.num_threads_per_udp; c++) { /* this is guaranteed to hit all threads because we round-robin */ dispatch_conn_new(sfd, conn_read, EV_READ | EV_PERSIST, UDP_READ_BUFFER_SIZE, transport); @@ -4575,6 +4577,16 @@ int main (int argc, char **argv) { } } + /* + * Use one workerthread to serve each UDP port if the user specified + * multiple ports + */ + if (settings.inter != NULL && strchr(settings.inter, ',')) { + settings.num_threads_per_udp = 1; + } else { + settings.num_threads_per_udp = settings.num_threads; + } + if (settings.sasl) { if (!protocol_specified) { settings.binding_protocol = binary_prot; |