[en] SAFE RECORD SHARING IN DYNAMIC PROGRAMMING LANGUAGES
[pt] Linguagens de programação dinâmicas estão cada vez mais populares e já foram utilizadas para desenvolver uma ampla gama de aplicações. Enquanto isso, processadores multi-núcleo se tornaram padrão, mesmo em computadores pessoais e dispositivos móveis. Dessa forma, os programadores precisam recor...
Main Author: | |
---|---|
Other Authors: | |
Language: | en |
Published: |
MAXWELL
2016
|
Subjects: | |
Online Access: | https://www.maxwell.vrac.puc-rio.br/Busca_etds.php?strSecao=resultado&nrSeq=25871@1 https://www.maxwell.vrac.puc-rio.br/Busca_etds.php?strSecao=resultado&nrSeq=25871@2 http://doi.org/10.17771/PUCRio.acad.25871 |
Summary: | [pt] Linguagens de programação dinâmicas estão cada vez mais populares e já
foram utilizadas para desenvolver uma ampla gama de aplicações. Enquanto
isso, processadores multi-núcleo se tornaram padrão, mesmo em computadores
pessoais e dispositivos móveis. Dessa forma, os programadores precisam
recorrer ao paralelismo para aprimorar o desempenho de seus programas.
Entretanto, a programação concorrente permanece difícil. Adicionalmente,
a despeito de avanços em linguagens estáticas, avaliamos que linguagens
dinâmicas ainda carecem de suporte adequado à concorrência. Nesta
tese argumentamos que o principal problema da programação concorrente é
a imprevisibilidade - comportamentos inesperados de programas, tais como
retornar valores descabidos. Observamos que a imprevisibilidade é mais
provável quando memória compartilhada é utilizada. Consequentemente,
propomos um modelo de comunicação para concorrência que visa disciplinar
o compartilhamento de memória em linguagens dinâmicas. O modelo
é baseado nos padrões emergentes de concorrência de não compartilhar dados
por padrão, imutabilidade de dados e tipos e efeitos (que transformamos
em capacidades). Ele demanda a utilização de objetos compartilháveis para
compartilhar dados e utiliza troca de mensagens para comunicação entre
fluxos de execução. Objetos compartilháveis podem ser compartilhados apenas para
leitura ou para leitura e escrita, o que permite acesso individual de
escrita e acessos paralelos de leitura. Implementamos um protótipo em Lua
para experimentar com o modelo na prática, bem como para conduzir uma
avaliação geral de desempenho. A avaliação demonstra que há benefícios na
utilização de memória compartilhada, mas ao mesmo tempo revela que os
controles utilizados para assegurar a disciplina ocasionam um impacto de
desempenho. === [en] Dynamic programming languages have become increasingly popular and
have been used to implement a range of applications. Meanwhile, multicore
processors have become the norm, even for desktop computers and
mobile devices. Therefore, programmers must turn to parallelism as a
means to improve performance. However, concurrent programming remains
difficult. Besides, despite improvements in static languages, we find dynamic
languages are still lacking in concurrency support. In this thesis, we argue
that the main problem with concurrent programming is unpredictability -
unexpected program behaviors, such as returning out-of-thin-air values. We
observe that unpredictability is most likely to happen when shared memory
is used. Consequently, we propose a concurrency communication model to
discipline shared memory in dynamic languages. The model is based on
the emerging concurrency patterns of not sharing data by default, data
immutability, and types and effects (which we turn into capabilities). It
mandates the use of shareable objects to share data. Besides, it establishes
that the only means to share a shareable object is to use message passing.
Shareable objects can be shared as read-write or read-only, which allows
both individual read-write access and parallel read-only access to data. We
implemented a prototype in Lua, called luashare, to experiment with the
model in practice, as well as to carry out a general performance evaluation.
The evaluation showed us that safe data sharing makes it easier to allow
for communication among threads. Besides, there are situations where
copying data around is simply not an option. However, enforcing control
over shareable objects has a performance cost, in particular when working
with nested objects. |
---|