Hi,
Quoting Chaitanya Gupta (mail@chaitanyagupta.com):
I tried using CXML to parse a slightly big (~1.2 MB) XML in ACL 8.0. I am using the following form to parse it into a DOM:
(cxml:parse xml (cxml-dom:make-dom-builder)) ; xml is a string
Generally, it takes about 0.73-0.75 sec to parse on my machine.
I'd accept that for now. You could try (cxml:parse xml nil) to see how much time XML parsing itself takes (as opposed to DOM building). I don't really have a recommendation regarding speed improvements either way though.
What also happens is that, while the parser is running, it blocks all the other threads i.e. they become unresponsive. Any clues on why it can be happening? And how it can be fixed?
Sounds to me like an artifact of ACL's scheduling algorithm.
On my version of ACL, the variable mp:*default-process-quantum* defaults to 2. If I understand correctly, this is measured in seconds, so if you just had a context switch before calling CXML:PARSE, which takes 0.75s in your case, ACL won't even consider giving time to any other thread.
(In particular because you're parsing from a string, so cxml doesn't spend any time blocking on input. The situation with files already buffered by the kernel might be similar though.)
You could try setting a lower process quantum if this bothers you.
Also, ACL on OS X (and Linux) does not run any Lisp code while a foreign call is being made (thus blocking all the other threads). Is there any chance that CXML calls any foreign code?
No, I don't think so.
d.