When using functions from addon blocks the main process node js?
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
Start with the readDataSerial N-API wrapper shown in the issue and trace the blocking Ibox_Controller_ReadData call. Review the Node.js addon guidance for asynchronous work, then determine how the result is delivered without blocking the main process. Done means the long-running read no longer prevents the Node.js main thread from processing other work.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Implemented a wrapper for the function using N-API. It works, but the problem is that when it works the main thread of the node does not work? How can I rewrite this function so that it does not block the main thread? What do I need to use async, callback, thread for this?
napi_value readDataSerial(napi_env env, napi_callback_info info) {
napi_status status;
size_t argc = 1;
napi_value args[1], object;
napi_value id, data;
status = napi_get_cb_info(env, info, &argc, args, NULL, NULL);
assert(status == napi_ok);
if (argc < 1) {
napi_throw_type_error(env, NULL, "Wrong number of arguments");
return NULL;
}
//....
Ibox_ReadData *context = calloc(1, sizeof(Ibox_Context));
//this function takes a long time and blocks the main process
Ibox_Result_Submit *submitResult = Ibox_Controller_ReadData(context);
status = napi_create_object(env, &object);
status = napi_create_string_utf8(env, submitResult->id, NAPI_AUTO_LENGTH, &id);
status = napi_set_named_property(env, object, "id", id);
status = napi_create_string_utf8(env, submitResult->date, NAPI_AUTO_LENGTH, &date);
status = napi_set_named_property(env, object, "data", data);
assert(status == napi_ok);
return object;
})
- Linguagem predominante
- C++
- Estrelas
- 2.6k
- Forks
- 598
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de nodejs/node-addon-examples
-
Create Valgrind run of testsAbertaenhancement
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
nodejs/node-addon-examples#585 · 1 reação ·
-
Add .d.ts files in samples.Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 38/100
nodejs/node-addon-examples#530 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
nodejs/node-addon-examples#445 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 32/100
nodejs/node-addon-examples#444 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
nodejs/node-addon-examples#381 ·
Todas as issues de nodejs/node-addon-examples
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
bug needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
microsoft/microsoft-ui-xaml#12515 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
FujiNetWIFI/fujinet-firmware#2261 ·
Mantenedores costumam responder em até 1 dia
-
bug difficulty: easy good first issue help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
nagisa-kamishiro/rosehip#73 ·
Mantenedores costumam responder em até 1 dia
-
bazel bug odb
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 80/100
The-OpenROAD-Project/OpenROAD#12095 · 1 comentário ·
Mantenedores costumam responder em até 1 dia