{"id":13521299,"url":"https://github.com/eduard-permyakov/peredvizhnikov-engine","last_synced_at":"2025-04-04T17:10:22.734Z","repository":{"id":191911481,"uuid":"543254392","full_name":"eduard-permyakov/peredvizhnikov-engine","owner":"eduard-permyakov","description":"A fully lock-free game engine written in C++20","archived":false,"fork":false,"pushed_at":"2023-10-05T12:20:57.000Z","size":12204,"stargazers_count":731,"open_issues_count":1,"forks_count":27,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-28T16:11:36.540Z","etag":null,"topics":["concurrency","cpp","ecs","game-engine","lock-free"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eduard-permyakov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-29T17:57:20.000Z","updated_at":"2025-03-28T00:18:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"796591c5-6dac-49cf-b7e3-7dd4efa72da5","html_url":"https://github.com/eduard-permyakov/peredvizhnikov-engine","commit_stats":null,"previous_names":["eduard-permyakov/peredvizhnikov-engine"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduard-permyakov%2Fperedvizhnikov-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduard-permyakov%2Fperedvizhnikov-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduard-permyakov%2Fperedvizhnikov-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduard-permyakov%2Fperedvizhnikov-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eduard-permyakov","download_url":"https://codeload.github.com/eduard-permyakov/peredvizhnikov-engine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247217222,"owners_count":20903009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrency","cpp","ecs","game-engine","lock-free"],"created_at":"2024-08-01T06:00:32.445Z","updated_at":"2025-04-04T17:10:22.714Z","avatar_url":"https://github.com/eduard-permyakov.png","language":"C++","funding_links":[],"categories":["游戏开发"],"sub_categories":[],"readme":"## ![logo](docs/images/peredvizhnikov-engine-logo.png) ##\n\nPeredvizhnikov Engine is a fully lock-free game engine written in C++20. It implements the *actor model* of concurrent computation on top of the language's coroutine primitives.\n\nUsing the *actor model* abstraction, it is possible to develop complex, parallel logic while being wholly isolated from the details of inter-thread synchronization. A completely lock-free implementation of the model brings with it many advantages, namely guaranteed progress even in the presence of arbitrary thread termination, deadlock-freedom, predictable latency in reacting to critical events, and fault-tolerance.\n\nIn fact, the degree of fault-tolerance in Peredvizhnikov Engine is so great, that the engine is guaranteed to continue running even when any of the worker threads is asynchronously killed. You may [verify this yourself](test/test_fault_tolerance.cpp).\n\nThe implementation is founded upon a mix of classical and novel ideas in lock-free programming. It includes [a novel implementation of Software Transactional Memory](src/atomic_struct.cpp), [a new kind of lock-free queue](src/lockfree_sequenced_queue.cpp), [an original lock-free serialization primitive](src/atomic_work.cpp), [a lock-free std::atomic_shared_ptr](src/atomic_shared_ptr.cpp), [a lock-free scheduler](src/scheduler.cpp), [a lock-free memory allocator](src/alloc.cpp), [a compile-time DAG](src/taskgraph.cpp) and plenty more!\n\nFor a detailed breakdown of all the lock-free algorithms that went into realizing the engine, rationale for the design, benchmarks, and more, please take a look at the accompanying document: [Peredvizhnikov Engine: Design and Implementation of a Completely Lock-Free Scheduler](docs/lockfree.pdf).\n\nTo further facilitate development with data-oriented design, Peredvizhnikov Engine implements an in-memory database that is optimized for component-wise access and supports large data sets. It is founded on performant [Flat Hash Map](src/flat_hash_map.cpp) and [Bitwise Trie with Bitmap](src/bitwise_trie.cpp) data structures.\n\n## Building Peredvizhnikov Engine ##\n\nAt the moment, the only supported platform is Linux. Clang++ 16 is required to build the sources.\n\n1. `git clone https://github.com/eduard-permyakov/peredvizhnikov-engine.git`\n2. `cd peredvizhnikov-engine`\n3. `make -j16 DEBUG=0`\n\n## License ##\n\nThe source code of Peredvizhnikov Engine is freely available under the GPLv3 license. However, I may grant permission to use parts or all of the code under a different license on a case-by-case basis. Please inquire by e-mail.\n\n## Contact ##\n\nYou may contact me with any questions, comments, or concerns pertaining to the source code or the underlying algorithms.\n\nIn addition, I am currently actively seeking employment. Please don't hesitate to reach out regarding any suitable opportunities.\n\nMy e-mail is: edward.permyakov@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduard-permyakov%2Fperedvizhnikov-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feduard-permyakov%2Fperedvizhnikov-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduard-permyakov%2Fperedvizhnikov-engine/lists"}