developing applications with apr
play

Developing Applications with APR Paul Querna pquerna@apache.org - PowerPoint PPT Presentation

Developing Applications with APR Paul Querna pquerna@apache.org July 21, 2005 http://www.outoforder.cc/presentations/ A.P.R. Apache Portable Runtime Origin: httpd Platforms: Unix, Netware, OS/2, Windows. Your Application APR-Util


  1. Developing Applications with APR Paul Querna pquerna@apache.org July 21, 2005 http://www.outoforder.cc/presentations/

  2. A.P.R. • Apache Portable Runtime • Origin: httpd • Platforms: Unix, Netware, OS/2, Windows.

  3. Your Application APR-Util APR Libraries Operating System

  4. Integration Points • Modules • Wrap Areas that use APR/Pools • C++ Objects • Entire Application • Memory pools everywhere

  5. Layers • Memory Allocation • OS Portability Functions • Library/Utility Functions (APR-Util)

  6. Memory Allocation. • Memory Pools • No free() • Less overhead than Garbage Collection • Still requires thinking! • Loops • Long running tasks

  7. apr_pool_create(&pool, NULL); for (i=0; i > n; ++i) { do_something(pool, i); apr_pool_clear(pool); } apr_pool_destroy(&pool, NULL);

  8. App Use Pool Size 15.00 11.25 7.50 3.75 0

  9. Not Perfect. • Unbounded Memory Usage: • ‘leaks’ • Pools will not free() to the OS. • Can be handled with sub-pools.

  10. App Use Pool Size 75.00 56.25 37.50 18.75 0

  11. void use_lots_of_ram(apr_pool_t* pool) { do { void* data = apr_palloc(pool, 500); .... } while(cond_true()); }

  12. void use_lots_of_ram(apr_pool_t* pool) { apr_pool_create(&subpool, pool); do { void* data = apr_palloc(subpool, 500); ... } while(cond_true()); apr_pool_destroy(subpool); }

  13. void use_lots_of_ram(apr_pool_t* pool) { apr_pool_create(&subpool, pool); do { void* data = apr_palloc(subpool, 500); ... apr_pool_clear(subpool); } while(cond_true()); apr_pool_destroy(subpool); }

  14. Integration Points • Modules • Wrap Areas that use APR/Pools • C++ Objects • Entire Application • Memory pools everywhere

  15. Simple Applications • Few Calls to initialize APR • Cleanup

  16. #include "apr.h" #include "apr_file_io.h" int main(int argc, char *argv[]) { apr_pool_t *p; apr_file_t *fp; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); apr_file_open_stdout(&fp, p); apr_file_printf(fp, "Hello World\n”); return 0; }

  17. Data Structures • apr_array_header_t • apr_table_t • apr_hash_t • APR Rings

  18. Arrays • apr_array_make() • initial size • apr_array_push() • returns pointer to new memory • nelts

  19. Tables • Keys & Values • Used for HTTP Headers • apr_table_do

  20. Hashes • Keys & Values • Arbitrary (void*)

  21. Rings • Double Linked List • Optional Debugging

  22. apr_status_t • 0 == APR_SUCCESS • Always use APR_STATUS_IS_* macros

  23. File IO • read, write, writev, sendfile, seek, locking • functions for stderr/stdout/stdin

  24. Network IO • read, write, writev, sendfile • sockaddr • pollset • kqueue/epoll/event ports

  25. Threading • Similar to pthreads • threads • mutex • thread • process • global

  26. APR-Util • Everything that doesn’t have a home?

  27. Bucket Brigades • Complicated -- entire sessions in past AC are on them • Buckets contain: • Files • Pipes • Sockets • Custom • Uses APR_RING_*

  28. DBM • iterate, fetch, insert • must be explicitly closed -- no cleanup

  29. apr_reslist • Pooling of Resources made easy • Proxy • DBI • Timeouts • Creation • Destruction

  30. apr_dbd • One API: • MySQL • Postrgres • SQLite v2 & v3 • Oracle (in progress)

  31. apr_dbd_driver_t* driver = NULL; apr_dbd_t* handle = NULL; apr_dbd_get_driver(pool, "sqlite3", &driver); apr_dbd_open(driver, pool, “db", &handle); apr_dbd_query(driver, handle, &nrows, sql);

  32. Questions? • http://www.outoforder.cc/presentations/

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend