Qual é a vantagem do microthread de python sem pilhas do que a coroutina de Lua na implementação do State Machine para o jogo?

StackOverflow https://stackoverflow.com/questions/4064594

Pergunta

Alguma vantagem sobre a implicação de python sem pilha que a coroutina de Lua? Qual é a diferença deles?

Foi útil?

Solução

Python e Tasklets sem pilha (não fiz nenhuma programação com python sem pilha, mas li alguns dos detalhes sobre como ele é implementado):

Prós:

  1. Leve na maioria das vezes.
  2. O Scheduler para gerenciar qual TaskLet será retomado em seguida, após o rendimento atual.
  3. Suporte para agendamento preventivo. (ou seja, corra para X Instruções)
  4. Canais para comunicação entre tasklets.

Contras:

  1. Às vezes, precisa de pilha C ao render a partir de um TaskLet. (ou seja, ao render de alguns retornos de chamada C)

Lua 5.1 com coroutinas simples:

Prós:

  1. Leve.
  2. As funções currume ()/rendimento () permitem que o modelo de comunicação do consumidor/produtor.

Contras:

  1. Nenhum agendador interno. Você precisa gerenciar a retomada e o rendimento de coroutinas.
  2. Não é possível render a partir de uma função C, um metametódio ou um iterador. (Lua 5.2 removerá a maioria dessas restrições, o Luajit 1.1 fornece comutação leve da pilha C para render de qualquer lugar)
  3. Nenhum suporte de agendamento preventivo integrado. (teria que usar ganchos de depuração)

Lua 5.1 com Concurrentlua:

Prós:

  1. Leve.
  2. Agendador com comutação cooperativa de contexto.
  3. Tem o estilo de Erlang de comunicação que passa de mensagens entre tarefas.
  4. Suporte para mensagem distribuída transparente que passa entre nós.

Contras:

  1. Não é possível render a partir de uma função C, um metametódio ou um iterador. (Novamente, a maioria dessas restrições desperta com Lua 5.2 e Luajit)
  2. Nenhum suporte de agendamento preventivo integrado. (teria que usar ganchos de depuração)

Luajit 2.0 beta com Concurrentlua:

Prós:

  1. Leve.
  2. Agendador com comutação cooperativa de contexto.
  3. Tem o estilo de Erlang de comunicação que passa de mensagens entre tarefas.
  4. Suporte para mensagem distribuída transparente que passa entre nós.
  5. O suporte JIT muito rápido faz Lua muito mais rápido que Python

Contras:

  1. Pode não ser capaz de render a partir de uma função C agora. Isso pode ser apoiado em lançamentos futuros.
  2. Nenhum suporte de agendamento preventivo integrado. (teria que usar ganchos de depuração)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top