1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhanglix-asyncio

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Что такое AsyncIO?

AsyncIO — это библиотека-помощник для сопрограмм на C++, основанная на функции сопрограммы llvm-5.0 или более поздней версии.

В AsyncIO v0.2 есть два компонента:

  • Сопрограмма (docs/coroutine.md). Сопрограммы значительно упрощают написание методов, генераторов и асинхронных генераторов. Эта часть AsyncIO представляет собой только заголовок, что означает, если это всё, что вам нужно, вы можете просто загрузить исходный код в свои проекты, а затем использовать его без сборки AsyncIO.
  • EventLoop (docs/event_loop.md) — простой планировщик на основе libuv, вдохновлённый EventLoop Python3. Он помогает запускать несколько сопрограмм «одновременно» в одном потоке.

Как установить

Установить зависимости

Убедитесь, что у вас установлены llvm 5.0 или выше, libc++, libc++abi, libuv и cmake.

На MacOS X
brew tap homebrew/versions
brew install --HEAD llvm #это установит libc++ по умолчанию
brew install cmake
brew install 
На Ubuntu
sudo apt-get install libuv cmake
# установите llvm-5.0 libc++ libc++abi в /usr/local
# загрузите отсюда http://releases.llvm.org/download.html#5.0.0

Сборка и установка

cd $ASYNCIO_PATH && mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 10
make test
make install

Примеры Есть несколько примеров в каталоге asyncio/examples. Для получения более подробной информации о конкретном классе вы можете проверить тесты в каталоге asyncio/tests или просто взглянуть на код.

sleep_sort.cpp

Исходный код: sleep_sort.cpp

#include <asyncio/asyncio.hpp>
#include <iostream>

using namespace std;
using namespace asyncio;

coro<void> sleepCout(EventLoop *loop, uint64_t value) {
  co_await sleep(loop, value);
  cout << value << endl;
}

int main() {
  EventLoop loop;
  cout << "Someone says 'sleep sort' is O(1)?" << endl;
  uint64_t max = -1;
  for (auto &&v : {5, 1, 9, 7, 3}) {
    loop.createTask(sleepCout(&loop, v))->release();
    max = max > v ? max : v;
  }
  loop.callLater(max + 20, [&] { loop.stop(); })->release();
  loop.runForever();
  cout << "... I think it makes sense! 🤣🤣🤣" << endl;
}

Скомпилируйте его:

$ clang -I $ASYNCIO_HEADER_PATH -o sleep_sort -lc++ -std=c++14 -stdlib=libc++ -fcoroutines-ts -lasyncio -L $ASYNCIO_LIB_PATH -rpath $ASYNCIO_LIB_PATH sleep_sort.cpp
 
$ ./sleep_sort
Someone says 'sleep sort' is O(1)?
1
3
5
7
9
... I think it makes sense! 🤣🤣🤣

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

A c++ coroutine library making use of llvm 5.0 coroutine experimental features to dramatically simplify asynchronous logical in C++. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/zhanglix-asyncio.git
git@api.gitlife.ru:oschina-mirror/zhanglix-asyncio.git
oschina-mirror
zhanglix-asyncio
zhanglix-asyncio
master