Tulkin sulauttaminen monisäikeiseen ohjelmaan

Show full item record



Permalink

http://urn.fi/URN:NBN:fi:hulib-202011174482
Title: Tulkin sulauttaminen monisäikeiseen ohjelmaan
Alternative title: Embedding an interpreter to a multi-threaded program
Author: Mikkola, Risto
Other contributor: Helsingin yliopisto, Matemaattis-luonnontieteellinen tiedekunta
University of Helsinki, Faculty of Science
Helsingfors universitet, Matematisk-naturvetenskapliga fakulteten
Publisher: Helsingin yliopisto
Date: 2020
Language: fin
URI: http://urn.fi/URN:NBN:fi:hulib-202011174482
http://hdl.handle.net/10138/321612
Thesis level: master's thesis
Discipline: Tietojenkäsittelytiede
Abstract: Ohjelmat koostuvat nykypäivänä useista eri kielillä tehdyistä osista. Eri kieliä käytetään niiden tarjoamien erilaisten etujen takia. Samassa ohjelmassa kieliä voidaan sekoittaa sulauttamalla yhden kielen tulkki toisella kielellä toteutettuun ohjelmaan, jolloin tulkin avulla yksi kieli voi suorittaa toisen kielen ohjelmia. Toimiakseen yhdessä kielten välille tulee rakentaa rajapinta, jonka avulla ne voivat kommunikoida. Kielet ovat jo tarkoitusperiensä perusteella eriävät, joten niiden välisen rajapinnan toteutuksessa on erilaisia yhteensopivuusongelmia. Lisäksi useiden sulautettavien kielten tulkit on suunniteltu vain yksisäikeiseen suoritukseen, joten niiden käyttö monisäikeisessä ohjelmassa voi vaarantaa ohjelman tehokkuuden tai eheyden. Tässä työssä etsimme kielten välisen rajapinnan ja monisäikeisyyden ongelmia tulkin sulautuksessa ja niihin käytettyjä ratkaisuja kirjallisuuden avulla. Sulautamme käytännöntyönä Lua-kielen tulkin C++-kieliseen monisäikeiseen MMORPG-pelin palvelinohjelmaan. Sulautetun kielen käyttötapaus asettaa käytännön rajoja suoritusnopeudelle, joten rinnakkaisuuden säilyttäminen on ensiarvoisen tärkeää. Käytännöntyössä sulautetun kielen tulkista luodaan monta toisistaan eristettyä instanssia, joita voidaan suorittaa rinnakkain eri säikeillä. Käyttötapauksen takia instanssit joutuvat jakamaan tietoa keskenään, joka tapahtuu tiedon sarjallistamisen kautta. Työn soveltava osa ja siinä käytettyjä ratkaisuja arvioidaan simuloimalla palvelinohjelman rakennetta ja suoritusta. Vertaamme tulkin yksisäikeistä sulautusta rinnakkaiseen toteutukseen ja toteamme, että testitilanteessa pääsemme haluttuihin melkein ideaalisiin suoritusnopeuksiin rinnakkaisuutta tukevan toteutuksen avulla. Nopeutuksen lisäksi toteamme muistinkulutuksen kasvun olevan vähäistä saatuihin hyötyihin nähden.Programs today consist of several parts made in different languages. Different languages ​​are used because of the different benefits they offer. In the same program, languages ​​can be mixed by embedding an interpreter of a language into a program implemented in another language, so that the interpreter allows one language to run programs made in another. In order for the languages to work together, they ​​need to be built into an interface that allows them to communicate. Languages ​​are already different in their purpose, so various compatibility issues raise in the implementation of the interface between them. In addition, interpreters for multiple embeddable languages ​​are designed for single-threaded execution only, so using them in a multi-threaded program can compromise the efficiency or integrity of the program. In this work, we look for the problems of language interface and multi-threading in interpreter embedding and the solutions used for them with the help of the literature. As a practical work, we integrate a Lua interpreter into a multithreaded MMORPG server program programmed in C++. The use case of the embedded language sets practical limits on execution speed, so maintaining concurrency is paramount. In practical work, many isolated instances of the embedded language interpreter are created, which can be performed in parallel with different threads. Due to the use case, the instances have to share information with each other, which takes place through the serialization of the information. The applied part of the work and the solutions used in it are evaluated by simulating the structure and execution of the server program. We compare a single-threaded embedding of the interpreter to a parallel implementation and find that in the test situation we achieve the desired near-ideal execution speeds with the help of the parallel implementation. In addition to acceleration, we find that the increase in memory consumption is small relative to the benefits obtained.
Subject: tulkki
sulautus
monisäikeinen
palvelin
arkkitehtuuri
C++
Lua
tutkielma


Files in this item

Total number of downloads: Loading...

Files Size Format View
Mikkola_Risto_tutkielma_2020.pdf 5.670Mb PDF View/Open

This item appears in the following Collection(s)

Show full item record