Skip to content

Commit 93dbf3b

Browse files
committed
Optimize code
1 parent 51ead69 commit 93dbf3b

File tree

9 files changed

+161
-149
lines changed

9 files changed

+161
-149
lines changed

core-tests/src/server/server.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,8 @@ TEST(server, task_worker) {
545545
exit(2);
546546
}
547547

548-
serv.onTask = [](Server *serv, swEventData *task) -> int {
549-
EXPECT_EQ(serv->get_task_count(), 1);
548+
serv.onTask = [](Server *serv, EventData *task) -> int {
549+
EXPECT_EQ(serv->get_tasking_num(), 1);
550550
EXPECT_EQ(string(task->data, task->info.len), string(packet));
551551
serv->gs->task_workers.running = 0;
552552
return 0;
@@ -556,13 +556,14 @@ TEST(server, task_worker) {
556556
ASSERT_EQ(serv.create_task_workers(), SW_OK);
557557

558558
thread t1([&serv]() {
559+
SwooleWG.run_always = true;
559560
serv.gs->task_workers.running = 1;
560561
serv.gs->tasking_num++;
561562
serv.gs->task_workers.main_loop(&serv.gs->task_workers, &serv.gs->task_workers.workers[0]);
562563
serv.gs->tasking_num--;
563-
EXPECT_EQ(serv.get_task_count(), 0);
564+
EXPECT_EQ(serv.get_tasking_num(), 0);
564565
serv.gs->tasking_num--;
565-
EXPECT_EQ(serv.get_task_count(), 0);
566+
EXPECT_EQ(serv.get_tasking_num(), 0);
566567
EXPECT_EQ(serv.get_idle_task_worker_num(), serv.task_worker_num);
567568
});
568569

@@ -581,6 +582,8 @@ TEST(server, task_worker) {
581582

582583
t1.join();
583584
serv.gs->task_workers.destroy();
585+
586+
ASSERT_EQ(serv.gs->)
584587
}
585588

586589
// PHP_METHOD(swoole_server, task)
@@ -724,7 +727,7 @@ TEST(server, task_worker4) {
724727
serv->gs->task_workers.dispatch(&buf, &_dst_worker_id);
725728
sleep(1);
726729

727-
EventData *task_result = &(serv->task_result[swoole_get_process_id()]);
730+
EventData *task_result = serv->get_task_result();
728731
sw_memset_zero(task_result, sizeof(*task_result));
729732
memset(&buf.info, 0, sizeof(buf.info));
730733
buf.info.len = strlen(packet);
@@ -779,7 +782,7 @@ TEST(server, task_worker5) {
779782
if (worker->id == 1) {
780783
int _dst_worker_id = 0;
781784

782-
EventData *task_result = &(serv->task_result[worker->id]);
785+
EventData *task_result = &(serv->task_results[worker->id]);
783786
sw_memset_zero(task_result, sizeof(*task_result));
784787

785788
File fp = make_tmpfile();

ext-src/php_swoole_server.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ struct ServerObject {
124124

125125
struct TaskCo {
126126
Coroutine *co;
127-
int *list;
127+
TaskId *list;
128128
uint32_t count;
129129
zval *result;
130130
};

ext-src/swoole_server.cc

Lines changed: 37 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ static void php_swoole_server_onManagerStart(Server *serv);
8686
static void php_swoole_server_onManagerStop(Server *serv);
8787

8888
static int php_swoole_server_task_finish(Server *serv, zval *zdata, EventData *current_task);
89-
static TaskId php_swoole_server_task_pack(EventData *task, zval *data);
89+
static TaskId php_swoole_server_task_pack(zval *data, EventData *task);
9090
static bool php_swoole_server_task_unpack(zval *zresult, EventData *task_result);
9191
static int php_swoole_server_dispatch_func(Server *serv, Connection *conn, SendData *data);
9292
static zval *php_swoole_server_add_port(ServerObject *server_object, ListenPort *port);
@@ -655,7 +655,7 @@ int php_swoole_create_dir(const char *path, size_t length) {
655655
return php_stream_mkdir(path, 0777, PHP_STREAM_MKDIR_RECURSIVE | REPORT_ERRORS, nullptr) ? 0 : -1;
656656
}
657657

658-
static TaskId php_swoole_server_task_pack(EventData *task, zval *zdata) {
658+
static TaskId php_swoole_server_task_pack(zval *zdata, EventData *task) {
659659
smart_str serialized_data = {};
660660
php_serialize_data_t var_hash;
661661

@@ -2973,7 +2973,8 @@ static PHP_METHOD(swoole_server, stats) {
29732973

29742974
if (serv->task_worker_num > 0) {
29752975
add_assoc_long_ex(return_value, ZEND_STRL("task_idle_worker_num"), serv->get_idle_task_worker_num());
2976-
add_assoc_long_ex(return_value, ZEND_STRL("tasking_num"), serv->get_task_count());
2976+
add_assoc_long_ex(return_value, ZEND_STRL("tasking_num"), serv->get_tasking_num());
2977+
add_assoc_long_ex(return_value, ZEND_STRL("task_count"), serv->gs->task_count);
29772978
}
29782979

29792980
add_assoc_long_ex(return_value, ZEND_STRL("coroutine_num"), Coroutine::count());
@@ -3056,9 +3057,6 @@ static PHP_METHOD(swoole_server, taskwait) {
30563057
RETURN_FALSE;
30573058
}
30583059

3059-
EventData buf;
3060-
memset(&buf.info, 0, sizeof(buf.info));
3061-
30623060
zval *zdata;
30633061
double timeout = SW_TASKWAIT_TIMEOUT;
30643062
zend_long dst_worker_id = -1;
@@ -3074,11 +3072,11 @@ static PHP_METHOD(swoole_server, taskwait) {
30743072
RETURN_FALSE;
30753073
}
30763074

3077-
if (php_swoole_server_task_pack(&buf, zdata) < 0) {
3075+
EventData buf;
3076+
if (php_swoole_server_task_pack(zdata, &buf) < 0) {
30783077
RETURN_FALSE;
30793078
}
30803079

3081-
int _dst_worker_id = (int) dst_worker_id;
30823080
TaskId task_id = serv->get_task_id(&buf);
30833081

30843082
// coroutine
@@ -3091,9 +3089,7 @@ static PHP_METHOD(swoole_server, taskwait) {
30913089
task_co.count = 1;
30923090
task_co.result = return_value;
30933091

3094-
sw_atomic_fetch_add(&serv->gs->tasking_num, 1);
3095-
if (serv->gs->task_workers.dispatch(&buf, &_dst_worker_id) < 0) {
3096-
sw_atomic_fetch_sub(&serv->gs->tasking_num, 1);
3092+
if (!serv->task(&buf, (int *) &dst_worker_id)) {
30973093
RETURN_FALSE;
30983094
}
30993095

@@ -3104,49 +3100,19 @@ static PHP_METHOD(swoole_server, taskwait) {
31043100
if (!retval) {
31053101
RETURN_FALSE;
31063102
}
3107-
return;
3108-
}
3109-
3110-
uint64_t notify;
3111-
EventData *task_result = &(serv->task_result[swoole_get_process_id()]);
3112-
sw_memset_zero(task_result, sizeof(*task_result));
3113-
Pipe *pipe = serv->task_notify_pipes.at(swoole_get_process_id()).get();
3114-
network::Socket *task_notify_socket = pipe->get_socket(false);
3115-
3116-
// clear history task
3117-
while (task_notify_socket->wait_event(0, SW_EVENT_READ) == SW_OK) {
3118-
if (task_notify_socket->read(&notify, sizeof(notify)) <= 0) {
3119-
break;
3103+
} else {
3104+
auto retval = serv->task_sync(&buf, (int *) &dst_worker_id, timeout);
3105+
if (!retval) {
3106+
RETURN_FALSE;
31203107
}
3121-
}
3122-
3123-
sw_atomic_fetch_add(&serv->gs->tasking_num, 1);
3124-
3125-
if (serv->gs->task_workers.dispatch_blocking(&buf, &_dst_worker_id) == SW_OK) {
3126-
while (1) {
3127-
if (task_notify_socket->wait_event((int) (timeout * 1000), SW_EVENT_READ) != SW_OK) {
3128-
break;
3129-
}
3130-
if (pipe->read(&notify, sizeof(notify)) > 0) {
3131-
if (serv->get_task_id(task_result) != task_id) {
3132-
continue;
3133-
}
3134-
zval zresult;
3135-
if (!php_swoole_server_task_unpack(&zresult, task_result)) {
3136-
RETURN_FALSE;
3137-
} else {
3138-
RETURN_ZVAL(&zresult, 0, 0);
3139-
}
3140-
break;
3141-
} else {
3142-
php_swoole_sys_error(E_WARNING, "taskwait failed");
3143-
break;
3144-
}
3108+
zval zresult;
3109+
auto task_result = serv->get_task_result();
3110+
if (!php_swoole_server_task_unpack(&zresult, task_result)) {
3111+
RETURN_FALSE;
3112+
} else {
3113+
RETURN_ZVAL(&zresult, 0, 0);
31453114
}
3146-
} else {
3147-
sw_atomic_fetch_sub(&serv->gs->tasking_num, 1);
31483115
}
3149-
RETURN_FALSE;
31503116
}
31513117

31523118
static PHP_METHOD(swoole_server, taskWaitMulti) {
@@ -3164,9 +3130,6 @@ static PHP_METHOD(swoole_server, taskWaitMulti) {
31643130
RETURN_FALSE;
31653131
}
31663132

3167-
EventData buf;
3168-
memset(&buf.info, 0, sizeof(buf.info));
3169-
31703133
zval *ztasks;
31713134
double timeout = SW_TASKWAIT_TIMEOUT;
31723135

@@ -3187,10 +3150,10 @@ static PHP_METHOD(swoole_server, taskWaitMulti) {
31873150
RETURN_FALSE;
31883151
}
31893152

3190-
int list_of_id[SW_MAX_CONCURRENT_TASK] = {};
3153+
TaskId list_of_id[SW_MAX_CONCURRENT_TASK] = {};
31913154

31923155
uint64_t notify;
3193-
EventData *task_result = &(serv->task_result[swoole_get_process_id()]);
3156+
EventData *task_result = serv->get_task_result();
31943157
sw_memset_zero(task_result, sizeof(*task_result));
31953158
Pipe *pipe = serv->task_notify_pipes.at(swoole_get_process_id()).get();
31963159
Worker *worker = serv->get_worker(swoole_get_process_id());
@@ -3219,7 +3182,9 @@ static PHP_METHOD(swoole_server, taskWaitMulti) {
32193182

32203183
zval *ztask;
32213184
SW_HASHTABLE_FOREACH_START(Z_ARRVAL_P(ztasks), ztask)
3222-
TaskId task_id = php_swoole_server_task_pack(&buf, ztask);
3185+
3186+
EventData buf;
3187+
TaskId task_id = php_swoole_server_task_pack(ztask, &buf);
32233188
if (task_id < 0) {
32243189
php_swoole_fatal_error(E_WARNING, "task pack failed");
32253190
goto _fail;
@@ -3280,7 +3245,7 @@ static PHP_METHOD(swoole_server, taskWaitMulti) {
32803245
}
32813246
(void) add_index_zval(return_value, j, &zresult);
32823247
_next:
3283-
content->offset += sizeof(DataHead) + result->info.len;
3248+
content->offset += result->size();
32843249
} while (content->offset < 0 || (size_t) content->offset < content->length);
32853250
// delete tmp file
32863251
unlink(file_path.c_str());
@@ -3313,9 +3278,6 @@ static PHP_METHOD(swoole_server, taskCo) {
33133278
int i = 0;
33143279
uint32_t n_task = php_swoole_array_length(ztasks);
33153280

3316-
EventData buf;
3317-
memset(&buf.info, 0, sizeof(buf.info));
3318-
33193281
if (n_task >= SW_MAX_CONCURRENT_TASK) {
33203282
php_swoole_fatal_error(E_WARNING, "too many concurrent tasks");
33213283
RETURN_FALSE;
@@ -3325,7 +3287,7 @@ static PHP_METHOD(swoole_server, taskCo) {
33253287
RETURN_FALSE;
33263288
}
33273289

3328-
int *list = (int *) ecalloc(n_task, sizeof(int));
3290+
TaskId *list = (TaskId *) ecalloc(n_task, sizeof(TaskId));
33293291
if (list == nullptr) {
33303292
RETURN_FALSE;
33313293
}
@@ -3337,20 +3299,19 @@ static PHP_METHOD(swoole_server, taskCo) {
33373299

33383300
zval *ztask;
33393301
SW_HASHTABLE_FOREACH_START(Z_ARRVAL_P(ztasks), ztask) {
3340-
task_id = php_swoole_server_task_pack(&buf, ztask);
3302+
EventData buf;
3303+
task_id = php_swoole_server_task_pack(ztask, &buf);
33413304
if (task_id < 0) {
33423305
php_swoole_fatal_error(E_WARNING, "failed to pack task");
33433306
goto _fail;
33443307
}
33453308
buf.info.ext_flags |= (SW_TASK_NONBLOCK | SW_TASK_COROUTINE);
33463309
dst_worker_id = -1;
3347-
sw_atomic_fetch_add(&serv->gs->tasking_num, 1);
3348-
if (serv->gs->task_workers.dispatch(&buf, &dst_worker_id) < 0) {
3310+
if (!serv->task(&buf, &dst_worker_id)) {
33493311
task_id = -1;
33503312
_fail:
33513313
add_index_bool(return_value, i, 0);
33523314
n_task--;
3353-
sw_atomic_fetch_sub(&serv->gs->tasking_num, 1);
33543315
} else {
33553316
server_object->property->task_coroutine_map[task_id] = &task_co;
33563317
}
@@ -3406,14 +3367,11 @@ static PHP_METHOD(swoole_server, task) {
34063367
}
34073368

34083369
EventData buf;
3409-
memset(&buf.info, 0, sizeof(buf.info));
3410-
3411-
if (php_swoole_server_task_pack(&buf, zdata) < 0) {
3370+
TaskId task_id = php_swoole_server_task_pack(zdata, &buf);
3371+
if (task_id < 0) {
34123372
RETURN_FALSE;
34133373
}
34143374

3415-
TaskId task_id = serv->get_task_id(&buf);
3416-
34173375
if (!serv->is_worker()) {
34183376
buf.info.ext_flags |= SW_TASK_NOREPLY;
34193377
} else if (fci.size) {
@@ -3424,15 +3382,11 @@ static PHP_METHOD(swoole_server, task) {
34243382

34253383
buf.info.ext_flags |= SW_TASK_NONBLOCK;
34263384

3427-
int _dst_worker_id = (int) dst_worker_id;
3428-
sw_atomic_fetch_add(&serv->gs->tasking_num, 1);
3429-
3430-
if (serv->gs->task_workers.dispatch(&buf, &_dst_worker_id) >= 0) {
3385+
if (serv->task(&buf, (int *) &dst_worker_id)) {
34313386
RETURN_LONG(task_id);
3387+
} else {
3388+
RETURN_FALSE;
34323389
}
3433-
3434-
sw_atomic_fetch_sub(&serv->gs->tasking_num, 1);
3435-
RETURN_FALSE;
34363390
}
34373391

34383392
static PHP_METHOD(swoole_server, command) {
@@ -3523,17 +3477,11 @@ static PHP_METHOD(swoole_server, sendMessage) {
35233477
}
35243478

35253479
EventData buf;
3526-
memset(&buf.info, 0, sizeof(buf.info));
3527-
3528-
if (php_swoole_server_task_pack(&buf, zmessage) < 0) {
3480+
if (php_swoole_server_task_pack(zmessage, &buf) < 0) {
35293481
RETURN_FALSE;
35303482
}
35313483

3532-
buf.info.type = SW_SERVER_EVENT_PIPE_MESSAGE;
3533-
3534-
Worker *to_worker = serv->get_worker(worker_id);
3535-
SW_CHECK_RETURN(serv->send_to_worker_from_worker(
3536-
to_worker, &buf, sizeof(buf.info) + buf.info.len, SW_PIPE_MASTER | SW_PIPE_NONBLOCK));
3484+
RETURN_BOOL(serv->send_pipe_message(worker_id, &buf));
35373485
}
35383486

35393487
static PHP_METHOD(swoole_server, finish) {
@@ -3576,21 +3524,19 @@ static PHP_METHOD(swoole_server_task, finish) {
35763524
}
35773525

35783526
static PHP_METHOD(swoole_server_task, pack) {
3579-
EventData buf;
3580-
memset(&buf.info, 0, sizeof(buf.info));
3581-
35823527
zval *zdata;
35833528

35843529
ZEND_PARSE_PARAMETERS_START(1, 1)
35853530
Z_PARAM_ZVAL(zdata)
35863531
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
35873532

3588-
if (php_swoole_server_task_pack(&buf, zdata) < 0) {
3533+
EventData buf;
3534+
if (php_swoole_server_task_pack(zdata, &buf) < 0) {
35893535
RETURN_FALSE;
35903536
}
35913537
buf.info.ext_flags |= (SW_TASK_NONBLOCK | SW_TASK_NOREPLY);
35923538

3593-
RETURN_STRINGL((char *) &buf, sizeof(buf.info) + buf.info.len);
3539+
RETURN_STRINGL((char *) &buf, buf.size());
35943540
}
35953541

35963542
static PHP_METHOD(swoole_server_task, unpack) {

include/swoole.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,14 @@ struct DataHead {
669669
struct EventData {
670670
DataHead info;
671671
char data[SW_IPC_BUFFER_SIZE];
672+
673+
uint32_t size() {
674+
return sizeof(info) + len();
675+
}
676+
677+
uint32_t len() {
678+
return info.len;
679+
}
672680
};
673681

674682
struct SendData {

include/swoole_process_pool.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ struct Worker {
141141
uint8_t msgqueue_mode;
142142
uint8_t child_process;
143143

144-
sw_atomic_t tasking_num;
145144
uint32_t concurrency;
146145
time_t start_time;
147146

0 commit comments

Comments
 (0)