NAME
Coro::MakeMaker - MakeMaker glue for the XS-level Coro API
SYNOPSIS
This allows you to control coroutines from C/XS.
DESCRIPTION
For optimal performance, hook into Coro at the C-level. You'll need to make changes to your Makefile.PL
and add code to your xs
/ c
file(s).
WARNING
When you hook in at the C-level you can get a huge performance gain, but you also reduce the chances that your code will work unmodified with newer versions of perl
or Coro
. This may or may not be a problem. Just be aware, and set your expectations accordingly.
HOW TO
Makefile.PL
XS
#include "CoroAPI.h"
BOOT:
I_CORO_API (
"YourModule"
);
API
This is just a small overview - read the Coro/CoroAPI.h header file in the distribution, and check the examples in EV/ and Event/*, or as a more real-world example, the Deliantra game server (which uses Coro::MakeMaker).
You can also drop me a mail if you run into any trouble.
#define CORO_TRANSFER(prev,next) /* transfer from prev to next */
#define CORO_SCHEDULE /* like Coro::schedule */
#define CORO_CEDE /* like Coro::cede */
#define CORO_CEDE_NOTSELF /* like Coro::cede_notself */
#define CORO_READY(coro) /* like $coro->ready */
#define CORO_IS_READY(coro) /* like $coro->is_ready */
#define CORO_NREADY /* # of procs in ready queue */
#define CORO_CURRENT /* returns $Coro::current */
#define CORO_THROW /* exception pending? */
#define CORO_READYHOOK /* hook for event libs, see Coro::EV */
/* C-level coroutine struct, opaque, not used much */
struct coro;
/* used
for
schedule-like-function prepares */
struct coro_transfer_args
{
struct coro
*prev
,
*next
;
};
/* this is the per-perl-coro slf frame info */
struct CoroSLF
{
void (
*prepare
) (pTHX_ struct coro_transfer_args
*ta
); /* 0 means not yet initialised */
int
(
*check
) (pTHX_ struct CoroSLF
*frame
);
void (
*destroy
) (pTHX_ struct CoroSLF
*frame
);
};
/* needs to fill in the
*frame
*/
typedef void (
*coro_slf_cb
) (pTHX_ struct CoroSLF
*frame
, CV
*cv
, SV *
*arg
,
int
items);
#define CORO_SV_STATE(coro) /* returns the internal struct coro * */
#define CORO_EXECUTE_SLF(cv,init,ax) /* execute a schedule-like function */
#define CORO_EXECUTE_SLF_XS(init) /* SLF in XS, see e.g. Coro::EV */
/* called on enter/leave */
typedef void (
*coro_enterleave_hook
) (pTHX_ void
*arg
);
#define CORO_ENTERLEAVE_HOOK(coro,enter,enter_arg,leave,leave_arg) /* install an XS-level enter/leave hook */
#define CORO_ENTERLEAVE_UNHOOK(coro,enter,leave) /* remove an XS-level enter/leave hook */
#define CORO_ENTERLEAVE_SCOPE_HOOK(enter,enter_arg,leave,leave_arg) /* install an XS-level enter/leave hook for the corrent scope */
AUTHOR/SUPPORT/CONTACT
Marc A. Lehmann <schmorp
@schmorp
.de>