libuv-svace-build
64 строки · 1.9 Кб
1/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2*
3* Permission is hereby granted, free of charge, to any person obtaining a copy
4* of this software and associated documentation files (the "Software"), to
5* deal in the Software without restriction, including without limitation the
6* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7* sell copies of the Software, and to permit persons to whom the Software is
8* furnished to do so, subject to the following conditions:
9*
10* The above copyright notice and this permission notice shall be included in
11* all copies or substantial portions of the Software.
12*
13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19* IN THE SOFTWARE.
20*/
21
22#include "uv.h"23#include "task.h"24
25#include <stdio.h>26#include <stdlib.h>27
28#define NUM_THREADS (20 * 1000)29
30static volatile int num_threads;31
32
33static void thread_entry(void* arg) {34ASSERT_PTR_EQ(arg, (void *) 42);35num_threads++;36/* FIXME write barrier? */37}
38
39
40BENCHMARK_IMPL(thread_create) {41uint64_t start_time;42double duration;43uv_thread_t tid;44int i, r;45
46start_time = uv_hrtime();47
48for (i = 0; i < NUM_THREADS; i++) {49r = uv_thread_create(&tid, thread_entry, (void *) 42);50ASSERT_OK(r);51
52r = uv_thread_join(&tid);53ASSERT_OK(r);54}55
56duration = (uv_hrtime() - start_time) / 1e9;57
58ASSERT_EQ(num_threads, NUM_THREADS);59
60printf("%d threads created in %.2f seconds (%.0f/s)\n",61NUM_THREADS, duration, NUM_THREADS / duration);62
63return 0;64}
65